Тряска при перемещении по terrain

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

Тряска при перемещении по terrain

Сообщение Fogsight 12 апр 2010, 13:15

При пересечении неровной местности модель танка начинает трястись когда использую Quaternion.Lerp в коде для плавного разворота. Тряска причем возникает даже когда контроллеры поворота не трогаю при движении по прямой.

То же самое происходит когда простой куб базовый с rigid body двигаю этим скриптом.

Этот же скрипт идеально работет для поворота башни и ствола. Когда использую transform.Rotate поворачивать сам танк то все гладко нет лишней тряски, но эффект плавности намного сложней получить.

Трясучий код:
Код: Выделить всё
...
void Update()
    {
        if (state == State.Upright)
        {
            if (Input.GetKey("a")) tankTurn -= turnSpeed;
            if (Input.GetKey("d")) tankTurn += turnSpeed;
            desiredRotation = Quaternion.Euler(0, tankTurn, 0);
            currentRotation = MyTank.localRotation;

            rotation = Quaternion.Lerp(currentRotation, desiredRotation, Time.deltaTime * turnSpeed);
            MyTank.localRotation = rotation;
...


Помогите если кто сталкивался как это разрешить оптимально. Спасибо.
Fogsight
UNец
 
Сообщения: 3
Зарегистрирован: 12 апр 2010, 12:57

Re: Тряска при перемещении по terrain

Сообщение Neodrop 12 апр 2010, 14:32

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

Re: Тряска при перемещении по terrain

Сообщение Serge 12 апр 2010, 15:35

Совершенно не понятно, зачем используется Lerp? Какой-то код у вас слишком замудренный.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Тряска при перемещении по terrain

Сообщение Fogsight 12 апр 2010, 15:46

FixedUpdate, LateUpdate, все давало такой же результат с дрожью. Я разрешил пока через .Rotate. Если кому интересно:
Код: Выделить всё
...
//Smooth turning
            if (Input.GetKey("a"))
            {
                if (!turning)
                {
                    turnSpeed = -1f;
                    turning = true;
                }
                turnSpeed *= 1.1f;
                if (Mathf.Abs(turnSpeed) >= 50) turnSpeed = -50;
                MyTank.Rotate(new Vector3(0, turnSpeed, 0) * Time.deltaTime);
            }
            if (Input.GetKey("d"))
            {
                if (!turning)
                {
                    turnSpeed = 1f;
                    turning = true;
                }
                turnSpeed *= 1.1f;
                if (Mathf.Abs(turnSpeed) >= 50) turnSpeed = 50;
                MyTank.Rotate(new Vector3(0, turnSpeed, 0) * Time.deltaTime);
            }
            //slowly stopping tank rotation
            if (Mathf.Abs(turnSpeed) > 0 && !Input.GetKey("a") && !Input.GetKey("d"))
            {
                turning = false;
                turnSpeed /= 1.1f;
                if (Mathf.Abs(turnSpeed) <= .1f)
                {
                    turnSpeed = 0;                   
                }
                MyTank.Rotate(new Vector3(0, turnSpeed, 0) * Time.deltaTime);
            }
...

Стоит наверно через тригонометрическую функцию пропустить чтоб еще плавней сделать.

Если у кого есть идеи что было причиной тряски было бы интересно выслушать. Так же странное поведение у Quaternion.Lerp при компиляции в Windows Standalone. В Web нормально работает а в Windows билде Lerp при продолжительной ротации как в стену ударяется и назад отскакивает(такое же поведение если в FixedUpdate делать) тоесть Lerp нежелательно получается на клавишах использовать, только на осях мыши (управление камерой с ним отлично везде работает).
Fogsight
UNец
 
Сообщения: 3
Зарегистрирован: 12 апр 2010, 12:57

Re: Тряска при перемещении по terrain

Сообщение Neodrop 12 апр 2010, 16:15

Учимся использовать тег syntax

Я что-то писал про LateUpdate ? :-?

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

Re: Тряска при перемещении по terrain

Сообщение Fogsight 12 апр 2010, 16:57

На кинематичный обьект гравитация небудет действовать.

Конечно пытается компенсировать, только вопрос в том почему transform.Rotate не создает дополничельной тряски даже когда продолжает работать на неровной поверхности, а transform.rotation дико трясет даже на Dot 0.999... между двумя кватернионами когда Lerp их сближает, бесконечно уменьшающейся скорости ротации...

Edit: Собственно тут очевидный ответ transform.rotation фактически заново похоже обьект расставляет что и дает тряску. Более интересный вопрос можно ли эту транзицию сгладить. Так как им на много удобней пользоваться.
Fogsight
UNец
 
Сообщения: 3
Зарегистрирован: 12 апр 2010, 12:57

Re: Тряска при перемещении по terrain

Сообщение Neodrop 12 апр 2010, 19:22

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


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

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

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