Предотвращение изменения вращения игрока в последнюю секунду в Unity - PullRequest
0 голосов
/ 01 февраля 2020

Unity с использованием C#

В игре сверху вниз, где вращение камеры заблокировано, я создал контроллер персонажа, который ограничен 8 осями и будет вращаться только с шагом 45 градусов. Подумайте ссылки пробуждения. Все работает, кроме как при движении по диагонали (с использованием WASD).

Когда я даю, например, go W & D, какую бы клавишу я не дал go последней, даже если за долю секунды игрок окажется в этом направлении, а не в намеченном вверх и вправо по диагонали.

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

        public float defaultSpeed = 6f;
        CharacterController controller;
        private Vector3 playerMovement;
        Vector2 input;
        float angle;
        Quaternion targetRotation;
        Transform cam;    

    // Start is called before the first frame update
    void Start()
    {
        controller = GetComponent<CharacterController>();
        cam = Camera.main.transform;
    }

    // Update is called once per frame
    void Update()
    {
        Movement();
    }    

    public void Movement()
    {
        //Get inputs
        input.x = Input.GetAxisRaw("Horizontal");
        input.y = Input.GetAxisRaw("Vertical");

        //Only update if keys are pressed
        if (Mathf.Abs(input.x) < deadZone && Mathf.Abs(input.y) < deadZone) return;

        //Get camera angle: input to radians - radians to  degrees - degrees plus the camera angle - limit angle to 45 degree increments
        angle = Mathf.Atan2(input.x, input.y);
        angle = Mathf.Rad2Deg * angle;
        angle += cam.eulerAngles.y;
        angle = Mathf.Round(angle / 45) * 45;

        //Rotate Character
        targetRotation = Quaternion.Euler(0, angle, 0 );
        transform.rotation = targetRotation;

        //Move Character 
        transform.position += transform.forward * defaultSpeed * Time.deltaTime;
    }

1 Ответ

0 голосов
/ 01 февраля 2020

Создайте куротин, который проверяет, отпущен ли ключ, и ждет, скажем, 0,5 секунды, пока не отпустят другой ключ. Если отпущен другой ключ, оставайтесь в этом направлении. Надеюсь, что это работает. Удачи.

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