Unity3D Как ограничить вращение без твердого тела? - PullRequest
0 голосов
/ 27 ноября 2018

Я делаю скрипт, который должен вращать GameObject как джойстик, что означает, что должны изменяться только оси X и Z.Поэтому я использую функции sin и cos для вычисления углов поворота.Но по какой-то причине меняется и ось Y.

public float alpha;

void Update () {
        alpha += Time.deltaTime;

        var x = R * Mathf.Cos(alpha);
        var z = R * Mathf.Sin(alpha);
        transform.Rotate(new Vector3(x, 0, z) * Time.deltaTime);
    }

Поэтому вопрос в том, как остановить изменение оси Y или, возможно, есть другой способ поворота объекта, например, джойстика.

PS Я использую Unity 2017.4.13f1

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я решил установить ось Y на 0 в каждом кадре.Возможно, не самое элегантное решение, но оно работает так, как мне нужно.

Vector3 rotationVector;

void Start()
{
    rotationVector = new Vector3();
}

private float alpha;
public float multiplier;

void Update () 
{
    alpha += Time.deltaTime;

    rotationVector.x = Mathf.Cos(alpha);
    rotationVector.z = Mathf.Sin(alpha);

    transform.Rotate(multiplier * rotationVector * Time.deltaTime);
    transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, transform.eulerAngles.z);
}
0 голосов
/ 27 ноября 2018

В вашей функции обновления вы можете написать:

public float alpha;
public Vector3 rotation;
void Start(){
    rotation = transform.rotation.eulerAngles;
}

void Update () {
    alpha += Time.deltaTime;
    var x = Mathf.Cos(alpha);
    var z = Mathf.Sin(alpha);
    rotation.x = x;
    rotation.z = z;
    transform.rotation = Quaternion.Euler(rotation*time.deltaTime);
}

Я не мог понять переменную R, которую вы умножили на Sin и Cos. Где это R определено ???

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