- Home /
Player Climbing a Ladder?
Hello I have a basic script that allows my player to walk, sprint, jump, and crouch. However my game requires that it should be able to climb ladders. Any help would be greatly appreciated Thanx in advance! :)
private var speed = 6.0;
var aimSpeed = 2.0;
var sprintSpeed = 10.0;
private var canSprint : boolean = true;
var sprintJumpSpeed = 8.0;
var normSpeed = 6.0;
var crouchSpeed = 6.0;
var crouchDeltaHeight = 1.0;
var jumpSpeed = 8.0;
var normJumpSpeed = 8.0;
var gravity = 20.0;
private var mainCamera : GameObject;
private var weaponCamera : GameObject;
static var crouching : boolean = false;
private var stopCrouching : boolean = false;
private var standardCamHeight : float;
private var crouchingCamHeight : float;
private var moveDirection = Vector3.zero;
private var grounded : boolean = false;
static var walking : boolean = false;
function Start() {
speed = normSpeed;
mainCamera = gameObject.FindWithTag("MainCamera");
weaponCamera = gameObject.FindWithTag("WeaponCamera");
crouching = false;
standardCamHeight = mainCamera.transform.localPosition.y;
crouchingCamHeight = standardCamHeight - crouchDeltaHeight;
}
function Update() {
if(mainCamera.transform.localPosition.y > standardCamHeight){
mainCamera.transform.localPosition.y = standardCamHeight;
} else if(mainCamera.transform.localPosition.y < crouchingCamHeight){
mainCamera.transform.localPosition.y = crouchingCamHeight;
}
if(weaponCamera.transform.localPosition.y > standardCamHeight){
weaponCamera.transform.localPosition.y = standardCamHeight;
} else if(weaponCamera.transform.localPosition.y < crouchingCamHeight){
weaponCamera.transform.localPosition.y = crouchingCamHeight;
}
if (Input.GetButtonDown ("Crouch")){
if(crouching){
stopCrouching = true;
normalSpeed();
return;
}
if(!crouching)
crouch();
}
if(crouching){
if(mainCamera.transform.localPosition.y > crouchingCamHeight){
if(mainCamera.transform.localPosition.y - (crouchDeltaHeight*Time.deltaTime*8) < crouchingCamHeight){
mainCamera.transform.localPosition.y = crouchingCamHeight;
} else {
mainCamera.transform.localPosition.y -= crouchDeltaHeight*Time.deltaTime*8;
}
}
if(weaponCamera.transform.localPosition.y > crouchingCamHeight){
if(weaponCamera.transform.localPosition.y - (crouchDeltaHeight*Time.deltaTime*8) < crouchingCamHeight){
weaponCamera.transform.localPosition.y = crouchingCamHeight;
} else {
weaponCamera.transform.localPosition.y -= crouchDeltaHeight*Time.deltaTime*8;
}
}
} else {
if(mainCamera.transform.localPosition.y < standardCamHeight){
if(mainCamera.transform.localPosition.y + (crouchDeltaHeight*Time.deltaTime*8) > standardCamHeight){
mainCamera.transform.localPosition.y = standardCamHeight;
} else {
mainCamera.transform.localPosition.y += crouchDeltaHeight*Time.deltaTime*8;
}
}
if(weaponCamera.transform.localPosition.y < standardCamHeight){
if(weaponCamera.transform.localPosition.y - (crouchDeltaHeight*Time.deltaTime*8) > standardCamHeight){
weaponCamera.transform.localPosition.y = standardCamHeight;
} else {
weaponCamera.transform.localPosition.y += standardCamHeight*Time.deltaTime*8;
}
}
}
}
function FixedUpdate() {
if (grounded) {
// We are grounded, so recalculate movedirection directly from axes
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed;
if(crouching){
stopCrouching = true;
normalSpeed();
}
}
}
// Apply gravity
moveDirection.y -= gravity * Time.deltaTime;
// Move the controller
var controller : CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
grounded = (flags & CollisionFlags.CollidedBelow) != 0;
if((Mathf.Abs(moveDirection.x) > 0) && grounded || (Mathf.Abs(moveDirection.z) > 0 && grounded)){
if(!walking){
walking = true;
BroadcastMessage("walking", SendMessageOptions.DontRequireReceiver);
}
} else if(walking){
walking = false;
BroadcastMessage("stopWalking", SendMessageOptions.DontRequireReceiver);
}
}
@script RequireComponent(CharacterController)
function aiming() {
speed = aimSpeed;
}
function crouch() {
speed = crouchSpeed;
//mainCamera.transform.position.y -= crouchDeltaHeight;
//weaponCamera.transform.position.y -= crouchDeltaHeight;
//BroadcastMessage ("crouching", SendMessageOptions.DontRequireReceiver);
this.GetComponent(CharacterController).height -= crouchDeltaHeight;
this.GetComponent(CharacterController).center -= Vector3(0,crouchDeltaHeight/2, 0);
crouching = true;
}
function normalSpeed () {
if(stopCrouching){
crouching = false;
//mainCamera.transform.position.y += crouchDeltaHeight;
//weaponCamera.transform.position.y += crouchDeltaHeight;
this.GetComponent("CharacterController").height += crouchDeltaHeight;
this.GetComponent("CharacterController").center += Vector3(0,crouchDeltaHeight/2, 0);
BroadcastMessage("stopWalking", SendMessageOptions.DontRequireReceiver);
stopCrouching = false;
} else if(crouching){
speed = crouchSpeed;
return;
}
speed = normSpeed;
jumpSpeed = normJumpSpeed;
}
function sprinting () {
if(crouching){
crouching = false;
//mainCamera.transform.position.y += crouchDeltaHeight;
//weaponCamera.transform.position.y += crouchDeltaHeight;
this.GetComponent(CharacterController).height += crouchDeltaHeight;
this.GetComponent(CharacterController).center += Vector3(0,crouchDeltaHeight/2, 0);
}
if(canSprint){
speed = sprintSpeed;
jumpSpeed = sprintJumpSpeed;
}
}
Comment
This link provides the answer: http://xn--m3h.net/umbrella/2010/11/unity3d-ladders
Your answer
Follow this Question
Related Questions
Gothic-like climbing and edge detection 0 Answers
Circular movement of the player 0 Answers
Create Player From Values [ Photon ] 0 Answers
Movement script breaks colliders 1 Answer