Управление испорчено при вращении - PullRequest
0 голосов
/ 09 июня 2018

Я создаю простой скрипт контроллера для персонажа в моей игре Unity.Однако, когда я нажимаю W и заставляю своего персонажа поворачиваться, его движение меняется, и все комбинации клавиш перепутаны.Вот мой код, который превращает символ:

transform.rotation = Quaternion.Euler(0,90,0);

Остальная часть моего кода

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player : MonoBehaviour {
    public float moveSpeed;
    void Start () {
        moveSpeed = 2f;
    }

    void Update () {

        transform.Translate(moveSpeed*Input.GetAxis("Horizontal")*Time.deltaTime,0f,moveSpeed*Input.GetAxis("Vertical")*Time.deltaTime);
        var v = Input.GetAxis("Vertical");
        var h = Input.GetAxis("Horizontal");

        if (v==1)
        {
            transform.rotation = Quaternion.Euler(0,90,0);
        }
    }
}

1 Ответ

0 голосов
/ 10 июня 2018

Функция Transform.Translate перемещается в объект в локальном пространстве по умолчанию.Когда GameObject вращается, это заставляет клавишу WASD перемещаться туда, куда объект направлен.

Чтобы предотвратить это, заставьте его переместиться в мировое пространство.Вы можете сделать это, передав Space.World второму параметру функции Transform.Translate.

void Update()
{

    var v = Input.GetAxis("Vertical");
    var h = Input.GetAxis("Horizontal");

    Vector3 translation = new Vector3(h, 0, v);
    translation *= moveSpeed * Time.deltaTime;

    transform.Translate(translation, Space.World);


    if (v == 1)
    {
        transform.rotation = Quaternion.Euler(0, 90, 0);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...