
oh God, don't release it ...
var horizontalRotationSpeed : float = 100.0; var groundSpeed : float = 25.0; var airSpeed : float = 5.0; var jumpSpeed : float = 220; var ladderSpeed : float = 15.0; var gravity : float = 10.0; var groundDrag : float = 2.0; var airDrag : float = 0.1; @hideInInspector var grounded : boolean = false; @hideInInspector var ladderClimbing : boolean = false; @hideInInspector var jumping : boolean = false; @hideInInspector var superJump : boolean = false; private var t : Transform; private var rb : Rigidbody; private var superJumpSpeed : float; private var offLadder : boolean = true; private var ladderTop : GameObject; function Awake () { t = transform; rb = rigidbody; rb.freezeRotation = true; rb.useGravity = false; GameStatus.mouseSensitivityX = horizontalRotationSpeed; } function Update () { rb.MoveRotation(rb****tation * Quaternion.Euler(Vector3.up * Input.GetAxis("Mouse X") * FPSCamera.fovMultiplier * GameStatus.mouseSensitivityX * Time.deltaTime)); if (Input.GetButtonDown("Jump")) { Jump(); } } function FixedUpdate () { var movement : Vector3; movement = Vector3(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"), 0); if (movement.sqrMagnitude > 1) movement.Normalize(); if (!ladderClimbing) { rb.AddRelativeForce(movement.y * Vector3.forward * ((grounded) ? groundSpeed : airSpeed)); rb.AddRelativeForce(movement.x * Vector3.right * ((grounded) ? groundSpeed : airSpeed)); } else { rb.AddRelativeForce(movement.y * Vector3.up * ladderSpeed); } if (jumping) { if (!superJump) { rb.AddForce(t.up * jumpSpeed); } else { rb.velocity = Vector3.zero; rb.AddForce(t.up * superJumpSpeed); superJump = false; } if (ladderClimbing) { offLadder = true; ladderClimbing = false; } jumping = false; } // We apply gravity manually for more tuning control rb.AddForce(Vector3(0, -gravity * rb.mass, 0)); } function Jump () { if (grounded) jumping = true; } function SuperJump (superSpeed : float) { if (grounded) { superJumpSpeed = superSpeed; superJump = true; jumping = true; } } function OffLadder () { offLadder = true; ladderTop.SendMessage("ToggleTop"); } function OnTriggerEnter ( col : Collider ) { if (!offLadder && col.tag == "TopLadder") { ladderTop = col.gameObject; Invoke ( "OffLadder", 1 ); ladderClimbing = false; ladderTop.SendMessage("ToggleTop"); } } function OnTriggerStay ( col : Collider ) { if ( col.transform.tag == "Ladder" ) { if (offLadder) { ladderClimbing = true; offLadder = false; } grounded = true; rb.drag = groundDrag; } } function OnCollisionEnter (collision : Collision) { grounded = true; rb.drag = groundDrag; } function OnCollisionStay (collision : Collision) { grounded = true; rb.drag = groundDrag; } function OnCollisionExit (collision : Collision) { if (!ladderClimbing) { grounded = false; rb.drag = airDrag; } }