Физика. Полёт ригидбоди при проникновении колайдера

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

Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 19 июл 2012, 09:48

Всем привет!

Хз правильно ли я заголовок написал :D


При входе одного ригидбоди в другой - они сильно и резко разлетаются в разные стороны.
Как можно это побороть?
Может какие-то настройки есть?

На ум приходит только это - постоянно проверять ускорение. Если оно сильно увеличилось, то уменьшить его.
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Guyver 19 июл 2012, 11:12

для того, чтобы побороть резкое разлетание 2х ригид боди, вам нужно хотябы для себя определиться, что именно вы хотите видеть в резульате + было бы здорово, еслиб вы поделились с форумчанами этой мыслью при задавании вопроса.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение seaman 19 июл 2012, 11:27

Вообще это нормальное поведение. Можно несколько настроить расстояние, на которое проникают коллайдеры друг в друга:
Physics.minPenetrationForPenalty
Или в преференсах.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 19 июл 2012, 18:19

Суть вот в чём. Сетевая игра, гонки. При лаге возможно такое, что машина соперника появится в машине игрока, и они разлетаются. Обычно это происходит при врезании машин. Мне бы надо чтоб они просто немного оттолкнулись в этом случае(как при обычном ударе), а не улетали на 100 метров

Physics.minPenetrationForPenalty в этом поможет?
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение IDoNotExist 20 июл 2012, 05:57

Diab10 писал(а):Суть вот в чём. Сетевая игра, гонки. При лаге возможно такое, что машина соперника появится в машине игрока, и они разлетаются.

Хм... у меня такое происхоило только на неавторитарном сервере, когда каждый из клиентов сам рассчитывает свою физику, а потом все это дело отправляет на сервер, серверу же в свою очередь надо расставить все по своим позициям (или как то так, в неавторитарном сервере вообще сложно понять кто что и когда рассчитал), а пинги то у всех разные, вот и получаются физические курьезы. Сделайте же авторитарный сервер на котором будет производиться расчет физики, а клиенты будут брать только информацию из серверного Rigidbody: position, velocity, rotation, angular velocity.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 20 июл 2012, 06:51

Легко сказать:) Неавторитарный сервер у меня, и скорее всего так и останется. Надо как то решить проблему с разлётами, а так всё норм
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение IDoNotExist 20 июл 2012, 09:41

Diab10 писал(а):Надо как то решить проблему с разлётами, а так всё норм

Легко сказать:), без костыля не обойтись полюбому, один выход который я вижу: не синхронизировать позицию Rigidbody, синхронизировать только velocity и angularVelocity и при разнице позиций на клиентах додвигать его до нужного места "силами" AddForce.

Вот смотрите: получается что на каком - либо клиенте А, Rigidbody игрока - клиента является источником данных для другого клиента В (клиентов), в то же время клиент A является приемником данных от клиента B, клиент B у вас передает позицию своего Rigidbody, а двигать Rigidbody как известно из документации нужно только силами, во избежания проблем которые возникли у вас. То же самое возникнет без всяких сетей, если просто попробуете сдвинуть позицию Rigidbody внутрь другого Rigidbody/Коллайдера.

UPD. Еще метод придумал, синхронизировать позицию в нем можно, даже нужно, но перед этим делать Rigidbody.SweepTest, от предыдущей позиции, и если SweepTest натыкается на другой Rigidbody, корректировать полученную позицию так чтобы он не оказался внутри (достаточно её сместить на полученный RaycastHit.distance, и Rigidbody окажется впритык к другому).
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 20 июл 2012, 13:20

Двигать силой мне кажется будет сложно. А что за ф-я такая, Rigidbody.SweepTest? Её нет в документации. Было бы круто, еслиб она была. При помощи неё как раз бы решил эту проблему
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 20 июл 2012, 13:22

Аа, нашёл её. Видимо на docs.unity3d.ru документация старая, и там её ещё не было. Всё никак не отучусь туда смотреть:)
Сейчас посмотрю что за функция
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 20 июл 2012, 13:28

Посмотрел, это немного не такая ф-я. Это она посылает один луч, а я хочу ф-ю, которая скажет что два колайдера проникли друг в друга. Есть такое?
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 20 июл 2012, 13:44

Кое что придумал. Повесить на соперников ещё по одному коллайдеру-триггеру. Если кто то в триггер вошёл, то отключаем коллайдер(его ведь можно отключить?) чтоб не было разлёта. Да, тогда машина может сквозь машину проехать, ну и пофиг, потом уже усовершенствований понавешую чтоб не дать машине дальше ехать.

Только вот вопрос в чём, успеет ли триггер сработать и отключить коллайдер? Или быстрее разлетятся чем отключится?
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение IDoNotExist 20 июл 2012, 15:24

Diab10 писал(а):Посмотрел, это немного не такая ф-я. Это она посылает один луч, а я хочу ф-ю, которая скажет что два колайдера проникли друг в друга. Есть такое?

Чего чего? Вы документацию по ней хорошо читали? Или у вас с инглишем плохо? Это именно такая функция блеять!
Tests if a rigidbody would collide with anything, if it was moved through the scene.

This is similar to doing a Physics.Raycast for all points contained in any of a Rigidbody's colliders, and returning the closest of all hits (if any) reported


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

Re: Физика. Полёт ригидбоди при проникновении колайдера

Сообщение Diab10 20 июл 2012, 18:05

IDoNotExist, спасибо, наверно то что нужно:)

Там где я читал, был другой текст: http://docs.unity3d.com/Documentation/S ... pTest.html

И да, у меня проблемы с английским, всё читаю через переводчик:)
Вот как он перевёл мою ссылку:

Возвращает
логические - Правда, когда размах Rigidbody пересекает любую коллайдера, в противном случае ложь.

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


Поэтому я видимо не так понял, т.к. такое понять сложно)
Плюс с толку сбило то, что нужно указывать направление, и то что в тексте пишется про райкаст, не так понял.

А по поводу что попробовать не хочу, так я хочу!:) Просто я дома буду только в понедельник, здесь не могу попробовать. Решил пока найти ответы на мои вопросы, чтоб сразу всё продолжить делать когда вернусь.
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023


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

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

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