Следующая функция позволит мне подниматься по лестницам, спускаться по лестницам и ничего не делать на лестницах.
У меня проблемы с прыжками с лестниц.
Я телепортируюсь нанаправление движения X и после этого падает на землю.
x = игрок и
- = поведение при прыжке
| - |= лестница
1.) | - |x
2.) | - |- - - - - - x (только один кадр)
После этого я обычно падаю вниз, как прыжок.
//PlayerController
//Ladder gets called in Update
private void Ladder(
{
//Jumping from Ladder
if (Input.GetKeyDown(KeyCode.Space))
if(!controller.isGrounded)
if (LadderClimb.canClimb)
{
Debug.Log("intend jump");
motion = true;
moveDirection.x = 0f;
moveDirection.x = (-jumpForce * 10);
moveDirection.y = -jumpForce;
}
//Pressing W on ladder
if (Input.GetKey(KeyCode.W))
{
if (LadderClimb.canClimb && !reverseClimbing) //Go Up
{
motion = true;
moveDirection.y = 0f;
moveDirection.y = (jumpForce * climbMultiplier);
if (!controller.isGrounded) moveDirection.x = 0f;
}
else if (LadderClimb.canClimb && reverseClimbing) //Go Down
{
motion = true;
moveDirection.y = 0f;
moveDirection.y = (-jumpForce * climbMultiplier);
if (!controller.isGrounded) moveDirection.x = 0f;
}
}
//Pressing S on ladder
else if (Input.GetKey(KeyCode.S))
{
if (LadderClimb.canClimb && reverseClimbing) //Go Up
{
motion = true;
moveDirection.y = 0f;
moveDirection.y = (jumpForce * climbMultiplier);
if (!controller.isGrounded)moveDirection.x = 0f;
}
else if (LadderClimb.canClimb && !reverseClimbing) //Go Down
{
motion = true;
moveDirection.y = 0f;
moveDirection.y = (-jumpForce * climbMultiplier);
if (!controller.isGrounded) moveDirection.x = 0f;
}
}
//Do Nothing (or just look around)
if (LadderClimb.canClimb)
if (!Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.S)
&& !Input.GetKey(KeyCode.Space))
motion = false;
}
}
//TThose functions apply the Movement in my character Controller:
//I did put my normal jump function in there too
//Apply Physics
private void PhysicFactors()
{
moveDirection.y = moveDirection.y + (Physics.gravity.y
* gravityScale * Time.deltaTime);
}
//Move
private void Move()
{
controller.Move(moveDirection * Time.deltaTime);
}
//General Jump
private void Jump()
{
moveDirection.y = 0f;
if (Input.GetButtonDown("Jump"))
moveDirection.y = jumpForce;
}
}
I highly believe, this code causes my "teleport on player x. axis
//Jumping from Ladder
if (Input.GetKeyDown(KeyCode.Space))
if(!controller.isGrounded)
if (LadderClimb.canClimb)
{
Debug.Log("intend jump");
motion = true;
moveDirection.x = 0f;
moveDirection.x = (-jumpForce * 10);
moveDirection.y = -jumpForce;
}
moveDirection.x = (-jumpForce * 10);
10 определяет, как далеко отпо лестнице я прыгну
, очевидно, я хочу добраться до moveDirection.x, но когда я нахожусь на земле в конце прыжка,
Я не хочу, чтобы меня телепортировали на -JumpForce* 10, а затем падают прямо на землю
Я так много исследовал, но не могу понять ...