Трейсер полета снаряда

Программирование на Юнити.

Трейсер полета снаряда

Сообщение WhiteDevil 25 дек 2010, 18:58

Имею такую текстуру, которые разделил на две разные:
Изображение
Делаю вот такую конструкцию плашек:
Изображение

Задняя горизонтальная плашка крутится вокруг оси 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);

}


Вот что выходит:
Изображение

Стрелка Z должна быть направлена в сторону красной на картинке - то есть в направлении движения. На картинке он летит боком, как я сказал в сторону красной.
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Трейсер полета снаряда

Сообщение WhiteDevil 29 дек 2010, 22:51

Хныыыыыы :(
Упрощу вопрос. Как изготовить функцию LookAt() для других осей?
Или где можно посмотреть исходник этой функции
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Трейсер полета снаряда

Сообщение Neodrop 30 дек 2010, 09:39

Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Трейсер полета снаряда

Сообщение WhiteDevil 30 дек 2010, 12:40

Спасибо, но ведь LookRotation(), как и LookAt() - контроль форвард-вектором.
А для задачи мне нужно, чтоб ап вектор следил за точкой.
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Трейсер полета снаряда

Сообщение WhiteDevil 04 янв 2011, 01:05

Не пойму, то ли вопрос такой тупой, что отвечать стыдно, то ли просто лень всем, как и мне очень сильно думать))

У плэйна есть форвард вектор, который смотрит на заданную цель. Нужно контролить ап-вектор объекта. Но ясно, что не целить им кудато надо, а только крутить вокруг форварда. Пробовал и кватернионами, и эулеровскими вращениями, хрень какаято получается. Руки кривые :(
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Трейсер полета снаряда

Сообщение gnoblin 04 янв 2011, 01:35

Quaternion.LookRotation(relativePos, -Vector.forward);
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Трейсер полета снаряда

Сообщение burlak 04 янв 2011, 14:08

Думаю просто лень...
Синтаксис:
Используется csharp
void Update ()
        {
                Transform cameraTrans = Camera.mainCamera.transform;
                Transform myTrans = transform;
               
                Vector3 dir = cameraTrans.position - myTrans.position;
                dir = myTrans.InverseTransformDirection(dir);
                dir.z = 0;
                dir = myTrans.TransformDirection(dir);
               
                myTrans.rotation = Quaternion.LookRotation(myTrans.forward, dir);
        }
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Трейсер полета снаряда

Сообщение WhiteDevil 04 янв 2011, 14:37

Вот спасибы... наверное я глуп, ибо, честно, поменять местами в лукРотэйшн параметры я просто бы не догадался
Даже формально не получается описать что под этим происходит...
Наконец-то беда разрешена и такими темпами видимо их будет еще много

Еще раз спасибо :)
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7