Получить игровой объект для копирования целевой позиции и вращения со скоростью / угловой скоростью - PullRequest
0 голосов
/ 03 марта 2020

У меня есть gameobject, за которым мне нужно следовать (с той же ориентацией позиции) другой gameobject, изменяя только velocity и angularvelocity. Для позиции это просто:

    clone.velocity = (target.transform.position - clone.transform.position) * k;

Но для angularvelocity я не нахожу, кажется, мне нужно использовать Quaternion.FromToRotation с чем-то вроде этого:

    Vector3 oldpoint = clone.transform.TransformDirection(Vector3.up);
    Vector3 newpoint = target.transform.TransformDirection(Vector3.up);
    var av=Quaternion.FromToRotation(oldpoint,newpoint);

но он возвращает quaternion, а angularvelocity - это vector3, я не нахожу, как его преобразовать.

1 Ответ

0 голосов
/ 11 марта 2020

Использование Quaternion.ToAngleAxis:

Vector3 oldpoint = clone.transform.TransformDirection(Vector3.up);
Vector3 newpoint = target.transform.TransformDirection(Vector3.up);
Quaternion av = Quaternion.FromToRotation(oldpoint,newpoint);

float angle;
Vector3 axis;

av.ToAngleAxis(out angle, out axis);

// Convert to signed angle
angle = Mathf.Repeat(angle + 180f, 360f) - 180f;

// depending on how rapidly you want it to rotate to match it 
// don't set too high or it might overshoot
float angularVelocityFactor = 0.01f; 

clone.angularVelocity = (angularVelocityFactor * angle) * axis;
...