private void ClimbLadder_SuperUpdate() { Vector3 moveInput = rpgCharacterController.moveInput; // If no input, don't do anything. if (moveInput == Vector3.zero) { return; } // If we can't move (i.e. because we're animating) ignore input. if (!rpgCharacterController.canMove) { return; } float ladderThreshold = 1.2f; if (moveInput.y > 0f) { Collider ladder = rpgCharacterController.ladder; Vector3 ladderTop = new Vector3(transform.position.x, ladder.bounds.max.y - ladderThreshold, transform.position.z); // Climb Off Top or Climb Up. if (superCharacterController.PointBelowHead(ladderTop)) { rpgCharacterController.ClimbLadder(3); rpgCharacterController.OnUnlockMovement += IdleOnceAfterMoveUnlock; } else { rpgCharacterController.ClimbLadder(1); } } else if (moveInput.y < 0f) { Collider ladder = rpgCharacterController.ladder; Vector3 ladderBottom = new Vector3(transform.position.x, ladder.bounds.min.y + ladderThreshold, transform.position.z); // Climb Off Bottom or Climb Down. if (superCharacterController.PointAboveFeet(ladderBottom)) { rpgCharacterController.ClimbLadder(4); rpgCharacterController.OnUnlockMovement += IdleOnceAfterMoveUnlock; } else { rpgCharacterController.ClimbLadder(2); } } }