Помогите с "физикой"

Физика в Unity

Помогите с "физикой"

Сообщение Phoenics 01 ноя 2010, 04:15

Всем привет!

Делаю тут 3d леталку в космосе, корабликами и ракетми управляю сам из скриптов, однако хочется использовать физику для колизий. Проблема в том что физика пытается крутить объекты так как ей надо, а мне надо что бы они двигались так как я им указываю. Пробовал поставить isKinematic, но перестали работаь колизии впрочем ожидаемо. Сейчас в скриптах гашу скорость объектов rigidbody.velocyty и сильно увеличил их массу и drag, вприцнипе помогло, однако остался неприятный эффект, сразу после столкновения двух объектов они чуть-чуть (не сильно но заметно) разъезжаются. Т.е. например при попадании ракеты в огромную космическую базу, базу отбрасывает назад. Вот я и ищу способ избавится от этого эффекта. Пробовал использовать Character controller но я так понял тчо там нельзя поменять колидер с капсулы на что-то другое, да и в целом он не для этого предназначен. Так же вместо колизий пробовал сделать на триггерах, однако ракеты и снаряды стали проваливатся сквозь объекты, впрочем это тоже понятно...

Если кто-то сталкивался с подобной проблемой когда воздействие физики на координаты и ориентацию объекта надо убрать а колизиии оставить, подскажите пожалуйста.

Спасибо за внимание.
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Re: Помогите с "физикой"

Сообщение bgeyts667 01 ноя 2010, 07:24

Удалите у корабля rigidbody. Но минус - столкновения будут засчитываться только с другими твердыми телами.
В вашем случае у космических кораблей можно удалить этот компонент, а у ракет оставить с выключенной гравитацией.
_bgeyts667@gmail.com
Аватара пользователя
bgeyts667
UNITрон
 
Сообщения: 175
Зарегистрирован: 25 авг 2010, 08:30
  • ICQ

Re: Помогите с "физикой"

Сообщение GrueGames 01 ноя 2010, 08:55

Поставьте галочку isTrigger и используйте для определения коллизий OnTriggerEnter
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Помогите с "физикой"

Сообщение Phoenics 01 ноя 2010, 11:55

bgeyts667 писал(а):Удалите у корабля rigidbody. Но минус - столкновения будут засчитываться только с другими твердыми телами.
В вашем случае у космических кораблей можно удалить этот компонент, а у ракет оставить с выключенной гравитацией.


Даный вариант мною уже рассматривался. Он нерпигоден в виду того что не будет работать колизии и между кораблями.
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Re: Помогите с "физикой"

Сообщение Phoenics 01 ноя 2010, 12:04

Newbie писал(а):Поставьте галочку isTrigger и используйте для определения коллизий OnTriggerEnter


Данный вариант я уже пробовал реализовать. Он меня неустроил потому что:
1. Снаряды и ракеты "проваливаются" внутрь кораблей особенно больших и взрываются уже внутри, из-за чего происходящее сомтрится неестественно.
2. Мы теряем информацию о месте коллизии, которая нма нужна что бы правлно спозиционировать эффекты взрывов например, и некоторые другие мелочи.
3. Если на корпусе большого корабля расположены относительно мелкие объекты, например турели, то часто из-за первого пункта снаряды и ракеты пролетают сквозь них, т.о. получается что игрок стреляет в турель а попадает в корабль, хотя турели можно уничтожать отдельно.
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Re: Помогите с "физикой"

Сообщение burlak 01 ноя 2010, 12:31

Phoenics писал(а):Всем привет!

Проблема в том что физика пытается крутить объекты так как ей надо, а мне надо что бы они двигались так как я им указываю.


Может быть у Вас и у Физики одинаковые цели? Просто надо этой самой Физике объяснить, что вы от нее хотите - в итоге получится проще и более реалистично, чем на скриптах. Ну и бороться с Физикой не придется :)
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Помогите с "физикой"

Сообщение Phoenics 01 ноя 2010, 13:02

burlak писал(а):
Phoenics писал(а):Всем привет!

Проблема в том что физика пытается крутить объекты так как ей надо, а мне надо что бы они двигались так как я им указываю.


Может быть у Вас и у Физики одинаковые цели? Просто надо этой самой Физике объяснить, что вы от нее хотите - в итоге получится проще и более реалистично, чем на скриптах. Ну и бороться с Физикой не придется :)


Вы совершенно правы! Я как раз и хочу объяснить физике что мои кораблики движутся не по законам Ньютоновской физики, и т.о. прийти к полному с ней взаимопониманию того факта что ей не следует вмешиватся и обновлять позиции объектов :)
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Re: Помогите с "физикой"

Сообщение Zaicheg 01 ноя 2010, 13:23

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

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

Re: Помогите с "физикой"

Сообщение burlak 01 ноя 2010, 14:35

Phoenics писал(а):Вы совершенно правы! Я как раз и хочу объяснить физике что мои кораблики движутся не по законам Ньютоновской физики, и т.о. прийти к полному с ней взаимопониманию того факта что ей не следует вмешиватся и обновлять позиции объектов :)


Это даже человеку сложно объяснить :)...

Я как то делал мотоцикл. Требовалось, чтобы он на сторону не заваливался... Победил при помощи скрипта:

На FixedUpdate очищал линейную скорость и момент вращения. Вот тут пример http://www.unifycommunity.com/wiki/inde ... le=Force2D Замечательно работает до сих пор, только не могу избавиться от ощущения, что это кушает много ресурсов.
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Помогите с "физикой"

Сообщение Phoenics 01 ноя 2010, 16:15

Ну в общем пока что решил слеующим образом - храню в базовом классе игрового объекта отдельно переменным с позицией и ориентацией. Если для для этого игрового объекта стоит флаг что физика ему не нужна, то в Update-е просто запихиваю эти переменные в transform, тем самым перетирая изменения внесённые физикой, и при работе логики она соотвесвтенно работает с этими переменными а не с transform-ом напрямую. Если физика нужна то галочку не ставлю и всё равботает как обычно. На первый взгляд работает так как нужно, объекты не дёргаются и колизии нормально отрабатывают, ну а дальше будем посмотреть.

Всем спасибо за участие!
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Re: Помогите с "физикой"

Сообщение GrueGames 01 ноя 2010, 17:59

Ну, Нео в "Матрице" так же делал :)
Аватара пользователя
GrueGames
UNITрон
 
Сообщения: 200
Зарегистрирован: 11 апр 2009, 16:42
Откуда: Samara, Russia
  • Сайт
  • ICQ

Re: Помогите с "физикой"

Сообщение burlak 01 ноя 2010, 19:14

ИМХО... все таки проще обнулять физику в FixedUpdate - за время между Update могут случаться коллизии, особенно с быстролетящими объектами
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Помогите с "физикой"

Сообщение Zaicheg 01 ноя 2010, 19:19

burlak писал(а):за время между Update могут случаться коллизии

Точно между 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: Помогите с "физикой"

Сообщение Phoenics 01 ноя 2010, 20:26

burlak писал(а):ИМХО... все таки проще обнулять физику в FixedUpdate - за время между Update могут случаться коллизии, особенно с быстролетящими объектами


Ну во-первых я тут на форуме почитал что FixedUpdate это вроде как медленна штука и надо старатся всю работу делать в обычном апдейте, к чему и стремлюсь.
Ну а если за время между кадрами у нас произошла колизия даже основывась на неточных данных, то значит эти два колизийных объекта были очень близко друг другу, настолько близко что успели соприкоснутся за время между кадрами. Такую погрешность я вполне готов принять, на глаз игроку она не будет видна, в конце концов погрешности такого же рода - описание сложной геомтерии простыми колидерами типа боксов и капсул, мы готовы смирится с тем что колиддер не всегда точно прилегает к геомтерии, по той простой причине что в движении во время игры эти неточности не бросаются в граза игроку.
Аватара пользователя
Phoenics
UNIт
 
Сообщения: 60
Зарегистрирован: 31 окт 2010, 22:29

Re: Помогите с "физикой"

Сообщение Neodrop 01 ноя 2010, 21:12

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

След.

Вернуться в PhysX

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

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