Unity2D: вращать объект, продолжая смотреть спереди - PullRequest
0 голосов
/ 02 июля 2018

Я безуспешно пытаюсь заархивировать вращательное движение по оси Z вокруг движущегося объекта , всегда "глядя вперед". Так должно выглядеть так: enter image description here

Самое близкое, что у меня было:

transform.RotateAround (targetPosition, Vector3.forward, moveSpeed);

Но он не смотрит "спереди".

enter image description here

Может ли кто-нибудь помочь мне с этим?

Заранее спасибо.

С наилучшими пожеланиями.

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Простое решение будет просто манипулировать фактическими координатами и игнорировать вращение ^^ Если объект перемещается и вы хотите, чтобы он продолжал вращаться вокруг него, просто сделайте его дочерним объектом.

Это трехмерное решение, в котором мы вращаемся вокруг Y:

  void Start() { angle = 0.0f }

  void Update() {
       angle += speed * Time.deltaTime; //Your starting angle that will be modified every frame
       CheckAngle(ref angle);

       float x = Mathf.Cos(angle * Mathf.Deg2Rad) * Radius;
       float z = Mathf.Sin(angle * Mathf.Deg2Rad) * Radius;
    }

    static void CheckAngle(ref float Angle) //It should probably return a value by it's name here tho not ref, not sure which is the correct way of doing this
    {
       if (Angle > 360) //You don't want your angle to go past the boundaries of an INT
           Angle = 0;
    }
0 голосов
/ 02 июля 2018

Если ваш объект («Удар молнии») не имеет поворота мира, то есть выровнен с мировой осью, как кажется из вашего примера, то проще всего просто установить вращение мира на кватернионную идентичность:

    transform.rotation = Quaternion.identity;

Обратите внимание, что изображение не будет вращаться, если вращается его родительский объект. Это будет по сути «рекламный щит» вашего объекта молнии. Если вы хотите, чтобы ваша молния была выровнена с родительским объектом, попробуйте что-то вроде:

    transform.rotation = transform.parent.rotation;
0 голосов
/ 02 июля 2018

Самое лучшее - сохранить текущее вращение, затем повернуть вокруг точки и, наконец, применить предыдущее вращение.

var rot = transform.rotation;
transform.RotateAround(targetPosition, Vector3.forward, moveSpeed);
transform.rotation = rot;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...