Делаю вот такую конструкцию плашек:
Задняя горизонтальная плашка крутится вокруг оси Z. Передняя - вокруг оси Y. В результате, с какой стороны не посмотри, должна получиться хорошая залепуха.
Пытаюсь сделать билборд для той плашки, что сзади. Проблема в том, что плашка и летит в направлении своего форварда, который направлен на объект в который летит. То есть лукЭт() применять нельзя. Пытаюсь делать кватернионами. Последовательность такая
1) делаю транслэйт объекта внаправлении врага
2) вычисляю вектор направления от залепухи до камеры
3) получаю кватернион вращения между апом залепухи и вектором, который получил выше
4) здесь я должен обнулить атрибуты, чтобы вращение происходило только вокруг оси зед. Соответственно, полагаю х, у и обнуляем.
5) производим вращение ориенации залепухи таким образом, чтобы его ап-вектор совпадал с вектором от залепухи до камеры
пришел к такому нерабочему результату:
Синтаксис:
Используется javascript
var speed: float = 1.0f;
function Update () {
// parent - дуло танка, направленное на врага. дуло "знает" в кого стреляет
var enemyPos: Vector3 = transform.parent.transform.gameObject.GetComponent("Begin").object.position;
var enemyDir: Vector3 = enemyPos - transform.position;
enemyDir.Normalize();
transform.Translate(enemyDir * speed, Space.World);
var toDir: Vector3 = Camera.main.transform.position - transform.position;
toDir.Normalize();
var quat: Quaternion = Quaternion.FromToRotation (transform.up, toDir);
quat.x = 0.0f;
quat.y = 0.0f;
transform.rotation = Quaternion.Slerp(transform.rotation, quat, 0.5f);
}
function Update () {
// parent - дуло танка, направленное на врага. дуло "знает" в кого стреляет
var enemyPos: Vector3 = transform.parent.transform.gameObject.GetComponent("Begin").object.position;
var enemyDir: Vector3 = enemyPos - transform.position;
enemyDir.Normalize();
transform.Translate(enemyDir * speed, Space.World);
var toDir: Vector3 = Camera.main.transform.position - transform.position;
toDir.Normalize();
var quat: Quaternion = Quaternion.FromToRotation (transform.up, toDir);
quat.x = 0.0f;
quat.y = 0.0f;
transform.rotation = Quaternion.Slerp(transform.rotation, quat, 0.5f);
}
Вот что выходит:
Стрелка Z должна быть направлена в сторону красной на картинке - то есть в направлении движения. На картинке он летит боком, как я сказал в сторону красной.