Воскресенье, 20 Октября 2019, 21:39

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как узнать что он успокоился? (вопрос по физике)
Как узнать что он успокоился?
andarkyДата: Вторник, 07 Мая 2013, 23:53 | Сообщение # 1
старожил
Сейчас нет на сайте
Есть объект (не один)
он имеет RigidBody и массу. Он генерится и падает.
отскакивает от пола, от других таких же объектов...
А КАК у знать когда он успокоится? Ну т.е. покувыркался, покувыркался и остановился.

В гугле я не знаю как правильно запрос задать. А в справке Унити так и не понял есть ли такая переменная (кажется её НЕТ)



Моя страничка по дизайну
GameDev//Design//3D
OpenGOOДата: Среда, 08 Мая 2013, 00:03 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Rigidbody.IsSleeping

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.1772]
andarkyДата: Среда, 08 Мая 2013, 11:02 | Сообщение # 3
старожил
Сейчас нет на сайте
и это как? в Update проверки делать?
судя по справке да...
спасибо OpenGOO,



Моя страничка по дизайну
GameDev//Design//3D
ЛевшаДата: Среда, 08 Мая 2013, 16:10 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата (andarky)
А КАК у знать когда он успокоится? Ну т.е. покувыркался, покувыркался и остановился.

Можно еще старую и новую позицию проверять через промежутки. (как вариант)


X.cor.R (Prologue)
OpenGOOДата: Среда, 08 Мая 2013, 17:17 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Проверку следует делать в FixedUpdate. Для справки порядок работы такой FixedUpdate затем физическая симуляция (физика может считаться и более одного раза за игровой цикл), потом Update. Хотя когда всё движется по кругу, уже и не определишь либо с начало FixedUpdate, затем симуляция и в конце Update или с начало Update, затем FixedUpdate, затем симуляция -)

Можно ещё проверять velocity и/или angularVelocity

Код
void FixedUpdate()
{
     if(rigidbody.velocity.magnitude < sleepVelocity)
         // делаем что-то полезное
}


Хотя по моему в обычных случаях лучше и легче довериться движку.


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.1772]


Сообщение отредактировал OpenGOO - Среда, 08 Мая 2013, 18:39
andarkyДата: Пятница, 24 Мая 2013, 22:41 | Сообщение # 6
старожил
Сейчас нет на сайте
Левша,
это и была моя изначальная идея - сравнивать transform.rotation и transform.position
через определенный промежуток времени.
Я думал что-то ээфективнее есть в унити.

А так... IsSleeping() - всё равно надо проверять в Update() или FixedUpdate()
хотя скорее всего никакой разницы не будет.
а еще и LateUpdate() какой-то существует...

а я в Update() всё кручу

Добавлено (24.05.2013, 14:57)
---------------------------------------------
ну работает у меня IsSleeping() - 1 раз.
а дальше я подбрасываю объект
он падает, кувыркается а потом затихает

но IsSleeping() уже НЕ СРАБАТЫВАЕТ!!
он что одноразовый??

Добавлено (24.05.2013, 14:59)
---------------------------------------------
да, уточнить должен: я подбрасываю его методом transform.position - т.е. помещаю в заданную точку

Добавлено (24.05.2013, 22:41)
---------------------------------------------
да уж...
Знаете какой выход я нашел?

Просто создал их копии:

Код
..
var newObj=Instantiate(gameObject, NewPosition, NewRotation);
newObj.name=transform.name;
Destroy(gameObject);
..


не лучшее решение - на рабочее.

Правда иногда бывает так что объект не может остановиться - если например куб лежит на MeshCollider,
поэтому ставлю счетчики - чтоб останавливать принудительно



Моя страничка по дизайну
GameDev//Design//3D
ЛевшаДата: Суббота, 25 Мая 2013, 21:19 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата (andarky)
сравнивать transform.rotation и transform.position

Имелось ввиду записывать oldPosition и сравнивать с newPosition через Vector3.Distance, через 1 кадр.
Аналогично и с rotation через Vector3.Angle.


X.cor.R (Prologue)

Сообщение отредактировал Левша - Суббота, 25 Мая 2013, 21:21
andarkyДата: Суббота, 25 Мая 2013, 21:34 | Сообщение # 8
старожил
Сейчас нет на сайте
Левша,
а это и было моей первой задумкой,
просто я доверился встроенным функциям PhysX

скорее всего так всё и переделаю



Моя страничка по дизайну
GameDev//Design//3D
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как узнать что он успокоился? (вопрос по физике)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2019 Рейтинг