(Проблема) движение на движущемся объекте

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

Re: (Проблема) движение на движущемся объекте

Сообщение Garu 17 авг 2010, 22:46

тут в общем подходе по ходу геморой, но то что натыкал прикидывая по бумажке, должно дать еще более худшие результаты.
методом "Если гора не идет к Магомеду, значит Vector3 прописан хреново" убрал ступени и заменил телепортами, пусть и более грузное и не логичное решение, но вродь решение. но увы, так ловлю иной глюк, персонажа забрасывает в нужную точку корабля, но кораблик то движется, в итоге пролетаю небольшое расстояние, и если в передних частях пара метров особо не решает (хоть и смотрится паршиво) то в задней части - пролетаю через окна без напряга. Весь упор в считании физики, скрипт выложил выше. Прикидывал считалку реем позиций и прочего, но в итоге вышло что надо 1 рей на общую позицию и 2 с 3 дабы понять - ступенька перед тобой, или стена (ставить 1 под наклоном и считать разницу - не слишком удобно выходит + не всегдаможет сработать) но блин, 3 рея чисто на осознание пространства, это перебор. Может че посоветуете? а то горстку вариантов посчитал, по сути это замена итоговых глюков и не больше.
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: (Проблема) движение на движущемся объекте

Сообщение Neodrop 18 авг 2010, 07:13

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

Re: (Проблема) движение на движущемся объекте

Сообщение Garu 18 авг 2010, 10:43

увы, но и это не подходит...
Как вариант пробовал нечто в духе:
стандартный геймплей, зашел на корабли(1ИФ - внутри коллайдера-тригера, 2ИФ - была ли колизия с кораблем) это дает осознание что да, мы точно на кораблике и находимся внутри его зоны действия (не спрыгнули с него), счет относительно новых координат и прочего, но тут по сути ловлю снова глюки именно физики.
попытка замены ступеней телепортами (с палубы в трюм и наоборот) - тоже все хорошо, но опять лажает физика.
У корабля идет меш колайдер, ригидбоди, у перса капсульный коллайдер от чар контроллера, подхожу к стене (во время движения корабля) и "трусь" около нее, о чудо, умудряюсь пролететь и сквозь нее. Сейчас пытаюсь докопаться до норм физики через чайлд, и аналога, без перемещения в чайлд корабля (ну очень уж не охота все так переделывать под чайлд), однако стопорюсь где лучше перебирать этот многокомпонентный геморой.
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: (Проблема) движение на движущемся объекте

Сообщение warr11r 18 авг 2010, 20:10

Удочери, может, персу ГО с каким-нибудь еще коллайдером?
Типа одна хрень - хорошо,а вот 2 -лучше.
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: (Проблема) движение на движущемся объекте

Сообщение Garu 18 авг 2010, 21:02

пробовал схитрить, раз сфера + ригидбоди в чаелде хавалось, засунул в нее управление:

Код: Выделить всё
var speed = 0.00;
var force = 0.00;

function FixedUpdate ()
{
   var oldAngle = Camera.main.transform.localEulerAngles.x;
   Camera.main.transform.localEulerAngles.x = 0;
   var spin = Camera.main.transform.TransformDirection(Vector3(Input.GetAxis("Vertical") * speed, 0, -Input.GetAxis("Horizontal") * speed));
   Camera.main.transform.localEulerAngles.x = oldAngle;
   rigidbody.AddTorque((spin - rigidbody.angularVelocity) * force);
}


даже такое дает очень фиговый итог с движением по наклонным. А более "лояльную" физику для объекта на корабле, я не представляю. Самая фигня, что все варианты которые успел попробовать, дают почти одни и те же глюки, для чаелда одни (скромнее) вне его - другие.
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: (Проблема) движение на движущемся объекте

Сообщение Paul Siberdt 18 авг 2010, 23:30

Перенесите игровую механику подальше от физики и будет вам счастье. Не двигайте персонажа силами, не считайте ускорения... миром правит тригоноетрия, а физика - эт лишь внешняя обертка ;)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: (Проблема) движение на движущемся объекте

Сообщение Garu 18 авг 2010, 23:53

Paul Siberdt писал(а):Перенесите игровую механику подальше от физики и будет вам счастье. Не двигайте персонажа силами, не считайте ускорения... миром правит тригоноетрия, а физика - эт лишь внешняя обертка ;)

Допустим, пример кода можно? То как представляете управление персонажем просто и на движущемся объекте?
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: (Проблема) движение на движущемся объекте

Сообщение Grin 19 авг 2010, 14:49

Может через Joint попробовать?
Grin
UNец
 
Сообщения: 34
Зарегистрирован: 12 июл 2010, 04:45
Откуда: Россия, г. Челябинск
  • ICQ

Re: (Проблема) движение на движущемся объекте

Сообщение Paul Siberdt 19 авг 2010, 15:07

Пример кода:
Код: Выделить всё
myTranslate += myOffset;
... где бы персонаж не находился.

Причем, персонаж позиционируется в LateUpdate, а весь мир - в Update.
И если под собой персонаж трейсит сместившийся объект, то он к своей myOffset добавляет myOffset опоры.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: (Проблема) движение на движущемся объекте

Сообщение Garu 19 авг 2010, 19:29

Grin писал(а):Может через Joint попробовать?

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



Paul Siberdt писал(а):Пример кода:
Код: Выделить всё
myTranslate += myOffset;
... где бы персонаж не находился.

Причем, персонаж позиционируется в LateUpdate, а весь мир - в Update.
И если под собой персонаж трейсит сместившийся объект, то он к своей myOffset добавляет myOffset опоры.

эм, как-то не особо вкурил, как оно должно помочь с вертикальным смещением, ежли персонаж попал на ступеньки + горизонтальным, который воздержит от пролетания через стену, ежли корабль разогнать пошустрее... Можно подробнее для тех, у кого психику уже унесло?
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: (Проблема) движение на движущемся объекте

Сообщение Paul Siberdt 19 авг 2010, 20:59

Да, я описал о совокупности смещений, а с проникновениями справляются трассировщики и триггеры.

Все дело в том, что скрипт ежекадрово трассирует окружающее пространство, в частности, опору, а триггеры-объемы контролируют коллизии над опорой. Если на кадре приходит информация, что точка коллизии с полом поднялась на 10 сантиметров выше, вносятся поправки в позицию объекта, согласно изменению точки коллизии ( или тупо поднимаем транслейт, или хитро интерполируем, или делаем что еще вывернутее )
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: (Проблема) движение на движущемся объекте

Сообщение Garu 03 дек 2010, 17:49

Отложил эту фигню и занялся другими частями, но теперь снова возник данный вопрос, и охота наконец то его решить...

Общий нужный принцип: есть объект имеющий коллайдер, из-за чего-то там он двигается (спец скрипт управления\скрипт тупо тянущий его куда-то итд) подбивать 1 большой скрипт под все движения - не самый лучший вариант, ибо иногда нужно простейшее движение и это решается скриптом в пару строк к примеру...

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

Попробовал из ю3 родной CharacterMotor скрипт, даже после сносной чистки он отстает в расчетах, в итоге получаем что он "дрожит" по направлению движения платформы, и разница при изменении скорости платформы лишь в размере "дерганий" - медленно - небольшое, быстро - колбасит капитально...

Порылся на офф форуме, большая часть предложения оказалась не слишком подходящей, в чайлд засовывать итд - это и вовсе не слишком хорошая идея... Буду рад всем предложениям, ибо все никак не соберу 100% безглючную систему взаимодействия платформы (с ступеньками, стенами итд) + персонаж на ней... Крайний вариант - что бы на довольно внушительной скорости хотя бы не было багов, а то реализовывать все на улиточной скорости - не айс...
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: (Проблема) движение на движущемся объекте

Сообщение Zaicheg 04 дек 2010, 14:05

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

Пред.

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

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

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