Задержка перед прыжком - PullRequest
0 голосов
/ 19 июня 2019

Я изучаю Unity, и я делаю движение персонажа, но анимация прыжка имеет задержку для буквального прыжка персонажа, 0,30 секунды, пока не поднимется, как мне добавить эту задержку в код

Например, я думал о том, чтобы сделать так, чтобы, когда вы нажмете «Космос», отпустили анимацию, посчитали 0,20 секунды и совершили прыжок. это жизнеспособно? Как я могу это сделать?

Короче говоря, персонаж прыгает перед анимацией.

Анимационное видео: https://imgur.com/a/LgzkSKi

public class PlayerController : MonoBehaviour {

    public float moveSpeed;
    public float jumpForce;
    public CharacterController controller;

    private Vector3 moveDirection;
    public float gravityScale;

    public Animator animator;

    void Start() {
        controller = GetComponent<CharacterController>();
    }

    void Update() {
        float yStore = moveDirection.y;
        moveDirection = (transform.forward * Input.GetAxis("Vertical")) + (transform.right * Input.GetAxis("Horizontal"));
        moveDirection = moveDirection.normalized * moveSpeed;
        moveDirection.y = yStore;

        jump();

        controller.Move(moveDirection * Time.deltaTime);
        animator.SetFloat("Speed", (Mathf.Abs(Input.GetAxis("Vertical"))));

    }

    void jump() {
        if (controller.isGrounded) {
            moveDirection.y = 0f;
            if (Input.GetButtonDown("Jump")) {
                moveDirection.y = jumpForce;
                Debug.Log("jump");
            }
        }
        moveDirection.y = moveDirection.y + (Physics.gravity.y * gravityScale * Time.deltaTime);
        animator.SetBool("isGrounded", controller.isGrounded);
    }
}

Ответы [ 2 ]

1 голос
/ 19 июня 2019

В вашей функции jump () не применяйте силу прыжка. Вместо этого установите следующий раз, когда персонаж должен прыгнуть.

float nextJumpTime;
bool todoJump;
void jump() {
    if (!todoJump && Input.GetButtonDown("Jump")) {
        // Remember we have to jump and when
        nextJumpTime = Time.time + 0.2f;
        todoJump = true;
    }
    // Execute the jump
    if (todoJump && Time.time >= nextJumpTime) {
        todoJump = false;
        moveDirection.y = jumpForce;
    }
}

Либо так, либо читайте на сопрограммы . Запустить сопрограмму на входе, yield return new WaitForSecond (0.2f); в сопрограмме, а затем выполнить прыжок.

0 голосов
/ 19 июня 2019

На то, что предлагает One Man Mokey Squad, я думаю, вам следует подумать о том, чтобы получить новую анимацию прыжка или обрезать текущую анимацию.Я думаю, что это не очень хорошая идея - создавать собственный код для этой анимации прерывистого перехода, потому что вы не сможете повторно использовать свой сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...