Физка твердого тела в рамках Unity3d

Общие вопросы о Unity3D

Физка твердого тела в рамках Unity3d

Сообщение EvgeniyT 25 ноя 2011, 07:40

Поместил в сцену объект - большой танк! Прикрепил к нему коллайдер, свойство твердого тела, ну в общем все как нужно. Нарисовал перед ним небольшую гору, посмотреть, как он будет по ней передвигаться. Написал элементарнейший скрипт, который заставляет танк ехать просто вперед вдоль одной из осей. Такн поехал, но он не нормально пересекает гору, как делал бы это реальный танк, а после прохождения ее он взлетает в воздух как будто спорткар после трамплина, и медленно опускается вниз. Я попробовал в режиме игры руками поднять его в небо, а он не грохнулся вниз, а начал скускаться как пушинка на парашюте. Видимо я что-то упустил. Думал может нужно поправить массу, сделал ему 10 000 кг - результата нет. Что еще нужно настроиться для реалистичного поведения тяжелых твердых тел?
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Физка твердого тела в рамках Unity3d

Сообщение raul82 25 ноя 2011, 07:46

Вероятно трение у физического материала большое
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Физка твердого тела в рамках Unity3d

Сообщение EvgeniyT 25 ноя 2011, 09:40

raul82 писал(а):Вероятно трение у физического материала большое

В любом случае, каким бы не было трение, когда тело весит 10000кг, оно не будет падать на землю со скорость 5 см в секунду.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Физка твердого тела в рамках Unity3d

Сообщение Левш@ 25 ноя 2011, 11:40

А каким боком тут трение?
Для того чтоб тело приобрело физические свойства надо повесить на обьект компонент РиджБоди.
А если не устраивает его гравитация, то есть простые способы установить свою гравитацию.

Синтаксис:
Используется javascript
moveDirection.y -= gravity * Time.deltaTime;
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Физка твердого тела в рамках Unity3d

Сообщение IDoNotExist 25 ноя 2011, 11:46

Левш@ писал(а):А каким боком тут трение?
Для того чтоб тело приобрело физические свойства надо повесить на обьект компонент РиджБоди.

Аффтар же написал
EvgeniyT писал(а):Прикрепил к нему коллайдер, свойство твердого тела, ну в общем все как нужно

Термин "свойство твердого тела" по видимому расшифровывается как Rigidbody, видимо он первый человек который русифицировал свою [unity 3D] . А все что нужно видимо расшифровывается как "и еще пару десятков очень нужных скриптов"

А вообще если серьезно, автор вы довольно сумбурно все описываете скриншоты чтоли настроек Rigidbody прикрепили бы, да и скрипт бы выложили, тем более если говорите что не большой. Зачем завтавлять людей на форуме догадываться что у вас и как.
EvgeniyT писал(а):Написал элементарнейший скрипт, который заставляет танк ехать просто вперед вдоль одной из осей. Такн поехал, но он не нормально пересекает гору, как делал бы это реальный танк, а после прохождения ее он взлетает в воздух как будто спорткар после трамплина, и медленно опускается вниз.

У вас какаято система движения танка или просто тупо GameObject с прикрепленным Rigidbody?
Если второе, то вероятно двигаете через изменение позиции, так делать нельзя Rigidbody нужно двигать через AddForce, AddRelativeForce, AddForceAtPosition и т.д., либо через модификацию velocity.

EvgeniyT писал(а):Я попробовал в режиме игры руками поднять его в небо, а он не грохнулся вниз, а начал скускаться как пушинка на парашюте. Видимо я что-то упустил. Думал может нужно поправить массу, сделал ему 10 000 кг - результата нет. Что еще нужно настроиться для реалистичного поведения тяжелых твердых тел?

За подобие сопротивления воздуха у Rigidbody отвечает параметр Drag, масса тут не при чем. Если Drag у вас равен 0, и скорость Rigidbody всеравно вас не устраивает, можно использовать способ который описали выше.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Физка твердого тела в рамках Unity3d

Сообщение Левш@ 25 ноя 2011, 14:53

Если второе, то вероятно двигаете через изменение позиции, так делать нельзя Rigidbody нужно двигать через AddForce, AddRelativeForce, AddForceAtPosition и т.д., либо через модификацию velocity.

Или двигать стандартно через CharacterController, он собсна для того и сделан.
Метод Translate хорош для ракет или катеров, но там где неровности ландшафта, лучше его не использовать.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Физка твердого тела в рамках Unity3d

Сообщение Syberex 25 ноя 2011, 22:57

Я тут тоже отписывался про танк, и мне тоже предлагали использовать чар.контроллер для танка :)
Но вот у меня тоже не вяжется чар.контроллер и его капсульный коллайдер с моделью танка.

Изучая доки встретил вот такую фразу
You use Character Controllers if you want to make a humanoid character.

конечно я понимаю, что она не запрещает, но все же, что-то значит ...
Или предложите как изменить капсульный коллайдер?

Чем лучше чар.контроллер по сравнению с ригидбоди + нужный коллайдер? Чего может быть будет не хватать?

Если второе, то вероятно двигаете через изменение позиции, так делать нельзя Rigidbody нужно двигать через AddForce, AddRelativeForce, AddForceAtPosition и т.д., либо через модификацию velocity.

Как раз пробовал так делать, но не двигается он ровно, ведет то в одну сторону, то в другую, с физ.материалом и трением 0.

Чем методы ригидбоди MovePosition и MoveRotation хуже, чем SimpleMove и Move у чар.контроллера? Или чем лучше? :)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Физка твердого тела в рамках Unity3d

Сообщение IDoNotExist 26 ноя 2011, 06:35

Syberex писал(а):
Если второе, то вероятно двигаете через изменение позиции, так делать нельзя Rigidbody нужно двигать через AddForce, AddRelativeForce, AddForceAtPosition и т.д., либо через модификацию velocity.

Как раз пробовал так делать, но не двигается он ровно, ведет то в одну сторону, то в другую, с физ.материалом и трением 0.


Чем методы ригидбоди MovePosition и MoveRotation хуже, чем SimpleMove и Move у чар.контроллера? Или чем лучше? :)

Есть еще вот такой туториал , там перемещение танка реализовано вроде через transform.Translate(), но тем не менее двигается довольно плавно на маленьких скоростях, посмотрите, может выясните что-то новое для себя.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Физка твердого тела в рамках Unity3d

Сообщение EvgeniyT 26 ноя 2011, 09:40

IDoNotExist писал(а):видимо он первый человек который русифицировал свою [unity 3D] .


Видимо я просто знаю английский, думаю как и 90% здешних пользователей.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Физка твердого тела в рамках Unity3d

Сообщение EvgeniyT 26 ноя 2011, 22:06

Насчет гравитации кто-нибудь может что-нибудь по уму сказать? Как имитировать гравитацию объектов разной массы? Если я помещу в воздух велосипед и танк, понятно что должно упасть первым. А они одинаково падаюсь как в невисомости.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Физка твердого тела в рамках Unity3d

Сообщение seaman 26 ноя 2011, 22:41

понятно что должно упасть первым

Мне вот понятно, а Вам похоже нет.
Время падения тела = Изображение
Как видим оно не зависит от массы тела. Так что и велосипед и танк упадут одновременно.
Возникает вопрос - может Вам сначала подучить физику, а уже потом ее пытаться имитировать в Юнити?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Физка твердого тела в рамках Unity3d

Сообщение Neyl 26 ноя 2011, 22:44

Если я помещу в воздух велосипед и танк, понятно что должно упасть первым. А они одинаково падаюсь как в невисомости.

И что должно упасть первым? :-\ На Земле на все тела действует одинаковое ускорение свободного падения g = 9,81 м/с²
Physx в Unity работает с этим же значением (по умолчанию). Изменить его можно в PhysicsManager или через свойство Physics.gravity
Таким образом изначально в движке все тела падают равноускоренно, как в вакууме. Масса на скорость падения не влияет.
Но в атмосфере во время падения на тела действует сила аэродинамического сопротивления (лобового сопротивления, сопротивления воздуха), которая зависит от плотности воздуха, формы объекта, и его текущей скорости (точнее, квадрата скорости). Именно из за нее различаются ускорения и скорости падения с парашютом или без него. В Unity для симуляции этой силы используется параметр Rigidbody.drag. Также, можно самостоятельно рассчитывать силу сопротивления и прикладывать ее к телу через Rigidbody.AddForce.
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: Физка твердого тела в рамках Unity3d

Сообщение EvgeniyT 26 ноя 2011, 22:53

Neyl писал(а):И что должно упасть первым? :-\

Для интереса проведите как-нибудь эксперимент. У меня не война марсиан, так что условия хотелось бы создать как на земле.
Пока только через AddForce смог сделать что нужно. Если это правильное решение, то ок.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

Re: Физка твердого тела в рамках Unity3d

Сообщение seaman 26 ноя 2011, 23:09

так что условия хотелось бы создать как на земле

Я вот Вас не понимаю. Что Вы хотите? На земле танк и велосипед падают одновременно. Это еще Галилей в Пизе показал. Вы хотите какую-то другую физику?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Физка твердого тела в рамках Unity3d

Сообщение EvgeniyT 26 ноя 2011, 23:22

Может я чего не понимаю, ладно, не важно. В любом случае, если нужно, чтобы что-то падало, то можно использовать AddForce.
EvgeniyT
UNIт
 
Сообщения: 142
Зарегистрирован: 14 дек 2010, 19:06
  • ICQ

След.

Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: Google [Bot] и гости: 11