x


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

asked Jan 01 '12 at 10:21 PM

joeybbb gravatar image

joeybbb
1 2 4 4

Jan 05 '12 at 01:37 PM Leocesar
(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

I can't seem to get this to work with Unity 4 :(

more ▼

answered Mar 16 at 12:16 AM

DanKoerner gravatar image

DanKoerner
1

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x1364
x801
x98
x35
x25

asked: Jan 01 '12 at 10:21 PM

Seen: 1559 times

Last Updated: Mar 16 at 12:16 AM