У меня есть игрок Endless Runner, который в любом состоянии может прыгать.При нажатии пробела мой игрок продолжает бесконечно подниматься в небо.
Он имеет анимацию и контроллер персонажа, но не Rigidbody
.Вместо этого я использовал его в скрипте.
В аниматоре я добавил bool ground
и триггер для прыжков.
Я установил условие grounded
в true при переходе из любого состояния в прыжок.
: Снимок экрана
Вот код ниже
private CharacterController controller;
private float jumpForce = 4.0f;
private float gravity = 12.0f;
private float verticalVelocity;
void Update()
{
Vector3 moveVector = Vector3.zero;
moveVector.x = (targetPosition - transform.position).normalized.x * speed;
bool isGrounded = IsGrounded();
animator.SetBool("jumping", isGrounded);
//Calculate Y
if (isGrounded) //if grounded
{
verticalVelocity = -0.1f;
if(Input.GetKeyDown(KeyCode.Space))
{
//jump
animator.SetTrigger("jumping");
verticalVelocity = jumpForce;
}
else
{
verticalVelocity -= (gravity * Time.deltaTime);
//fast faling mechanic
if(Input.GetKeyDown(KeyCode.Space))
{
verticalVelocity = -jumpForce;
}
}
}
}
private bool IsGrounded()
{
Ray groundRay = new Ray(new Vector3(
controller.bounds.center.x,
(controller.bounds.center.y - controller.bounds.extents.y) + 0.2f,
controller.bounds.center.z),
Vector3.down);
return (Physics.Raycast(groundRay, 0.2f + 0.1f));
}
Любые идеи очень ценятся!