Не корректное врощение объекта по часовой стрелки

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

Не корректное врощение объекта по часовой стрелки

Сообщение ret 25 май 2010, 18:13

планировалось сделать что бы объект поворачивался верхом всегда в сторону мышки. в итоге получил вот такой код. а проблема в том что если курсором водить во круг объекта против часовой стрелки то все норм а вот по часовой его дико колбасит (дергается). в чем прикол?

Код: Выделить всё
function FixedUpdate () {

   var speed: float = 5;

   if (/*Input.GetButton ("Fire1") &&*/ canControl) {
   
      var playerPlane = new Plane(Vector3.forward, transform.position);
      var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
      var hitdist = 0.0;

      if (playerPlane.Raycast (ray, hitdist)) {
         var targetPoint = ray.GetPoint(hitdist);
         var dist = targetPoint-transform.position;
         var angle:float = Vector3.Angle(dist, transform.up);
         
         transform.Rotate(0, 0, angle, Space.World);
      }
   }
}
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50

Re: Не корректное врощение объекта по часовой стрелки

Сообщение Zaicheg 25 май 2010, 18:17

Читать ввод с устройств в FixedUpdate — неправильно. Читайте в Update.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Не корректное врощение объекта по часовой стрелки

Сообщение ret 25 май 2010, 18:33

спасибо учту только это не решает проблему.
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50

Re: Не корректное врощение объекта по часовой стрелки

Сообщение Zaicheg 25 май 2010, 18:54

ret писал(а):спасибо учту только это не решает проблему.

А вы попробовали?

Производить transform.Rotate в FixedUpdate не стоит. Производите его в Update и домножайте на Time.deltaTime, если нужно.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Не корректное врощение объекта по часовой стрелки

Сообщение ret 25 май 2010, 20:24

да, пробовал. не решило.
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50

Re: Не корректное врощение объекта по часовой стрелки

Сообщение Zaicheg 25 май 2010, 20:35

FixedUpdate() {
if (playerPlane.Raycast (ray, hitdist)) {
transform.Rotate(0, 0, angle, Space.World); } }

Рейкаст происходит каждый фикседапдейт (несколько раз в секунду). Ротейт, соответственно, тоже происходит раз в несколько секунд. Или делайте интерполяцию или ищите другое условие для запуска ротейта.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Не корректное врощение объекта по часовой стрелки

Сообщение ret 25 май 2010, 23:04

Спасибо дружище. Теперь все просто отлично :)
вод код. (так на всякий случай)

Код: Выделить всё
function Update () {

var speed: float = 0.1;

   if (/*Input.GetButton ("Fire1") &&*/ canControl) {
   
      var playerPlane = new Plane(Vector3.forward, transform.position);
      var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
      var hitdist = 0.0;

      if (playerPlane.Raycast (ray, hitdist)) {
         var targetPoint = ray.GetPoint(hitdist);
         var dist = targetPoint-transform.position;
         
       var rotate = Quaternion.LookRotation(dist, transform.up);
       transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.time * speed);
      }
   }

}
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50

Re: Не корректное врощение объекта по часовой стрелки

Сообщение Zaicheg 26 май 2010, 07:45

Насколько помню, вызов рейкаста в Update может приводить ко всяким несостыковкам, так как это физический метод, и лучше его в FixedUpdate вызывать. На Physics.Raycast я такое наблюдал.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Не корректное врощение объекта по часовой стрелки

Сообщение ret 26 май 2010, 12:48

В документации про Raycast не чего не сказано где его вызывать. а в их примерах он вызывается как в Update так и в FixedUpdate.
ret
UNец
 
Сообщения: 16
Зарегистрирован: 25 май 2010, 17:50

Re: Не корректное врощение объекта по часовой стрелки

Сообщение Zaicheg 26 май 2010, 12:55

Если бы это было прописано в документации, то я не столкнулся бы с такой проблемой на практике. А так вот.
Правда я не поручусь, что Plane.Raycast не работает как-то иначе нежели Physics.Raycast
У меня мобы опрашивали перед собой каждый кадр пространство рейкастом на определение цели. Пока не перенёс в фикседапдейт — регулярно были пропуски целей.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец


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

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

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