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! :slight_smile:

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;
	}
}

I can’t seem to get this to work with Unity 4 :frowning: