Четверг, 14 Ноября 2024, 10:27

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Нужен ли триггеру Rigidbody?
VerdCSДата: Воскресенье, 14 Февраля 2016, 06:34 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем привет. Давно меня мучает вопрос, а ответа так и не нашёл.

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

Так можно ли перемещать объект с коллайдером но без rigidbody если коллайдер в статусе триггера?

Спасибо всем кто откликнулся!

Вопрос прояснился. Начиная с версии 5.0 в Unity используется PhysX3, в котором переписали принцип работы с коллайдерами. Теперь можно двигать любой коллайдер (независимо от того триггер он или нет), при этом не важно есть ли у него rigidbody. Статические коллайдеры больше не кешируются, и их перемещение больше не приводит к пересчёту таблиц.

Так что если версия 5.0 и старше, движущемуся коллайдеру необязательно вешать rigidbody.

Если используется более ранняя версия Unity то любому движущемуся коллайдеру необходимо вешать rigidbody.


Сообщение отредактировал VerdCS - Понедельник, 15 Февраля 2016, 12:36
RangerДата: Воскресенье, 14 Февраля 2016, 11:19 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Я думаю в случ тригера ригидбоди вешать необязательно.
т.к. (судя по задаче) с другими коллайдерами он взаимодействовать не будет.


OpenGOOДата: Воскресенье, 14 Февраля 2016, 13:03 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Для коллайдера в статусе триггера физика твердых тел не применяется.

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

[GameMaker: Studio v1.4.9999]
argcДата: Воскресенье, 14 Февраля 2016, 14:00 | Сообщение # 4
был не раз
Сейчас нет на сайте
От того, что коллайдер является триггером, он не перестает от этого участвовать в системе коллизий. Так что да, Rigidbody нужен.
http://forum.unity3d.com/threads/how-to-create-moving-triggers.36736/
KamiRoninДата: Воскресенье, 14 Февраля 2016, 14:23 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
VerdCS, объект может перемещаться и полностью без rigidbody, и даже без коллайдера.
Если у тебя объект перемещается путем эмуляции физики (impuls, force, gravity) - тогда ригидбоди нужен не зависимо от того коллайдер у него - триггер или не треггер!
Если у твоей "кнопки" перемещения регулируются скриптом, без использования эмуляции физики (transform.position...), тогда нужно ответить на вопрос - должна ли эта кнопка быть препятствием для других объектов имеющих ригидбоди или коллайдер-не-триггер? Если да - тогда колладер должен быть без вкл галки isTrigger, иначе - можно включить.
Движущуюся кнопку можно сделать на uGUI без использования коллайдеров и триггеров вообще (у канваса своя система отлова взаимодействия мыши с объектом - без использования колладера или триггера).

Грубо говоря движение + коллайдер + триггер напрямую не зависят друг от друга! Каждый из них выполняет свою функцию и несет свои возможности, которые ты можешь применить для решения своей задачи. Можно строить и так механику и так.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
RangerДата: Воскресенье, 14 Февраля 2016, 16:10 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
argc,
Читайте внимательней.
Человеку кнопка нужна, а не взаимодействие с другими объектами.

Цитата KamiRonin ()
Можно строить и так механику и так.

Здесь вопрос производительности. перемещающиеся коллайдеры без ригидбоди жрут цпу.


argcДата: Воскресенье, 14 Февраля 2016, 18:33 | Сообщение # 7
был не раз
Сейчас нет на сайте
Цитата Ranger ()
Здесь вопрос производительности. перемещающиеся коллайдеры без ригидбоди жрут цпу.

Вот по этому и нужно использовать rigidbody
RangerДата: Воскресенье, 14 Февраля 2016, 18:47 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Цитата argc ()
Вот по этому и нужно использовать rigidbody

еще раз для прапорщиков.
на триггеры вешать ригидбоди не обязательно




Сообщение отредактировал Ranger - Воскресенье, 14 Февраля 2016, 18:47
argcДата: Воскресенье, 14 Февраля 2016, 18:58 | Сообщение # 9
был не раз
Сейчас нет на сайте
Цитата Ranger ()
на триггеры вешать ригидбоди не обязательно

Еще раз: если коллайдер движется, не важно, триггер это или нет, то на него нужно вешать ригитбоди, дабы юнити не делал перекеширование.
RangerДата: Воскресенье, 14 Февраля 2016, 19:11 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Цитата argc ()
дабы юнити не делал перекеширование.

пруфлинк...............


argcДата: Воскресенье, 14 Февраля 2016, 19:18 | Сообщение # 11
был не раз
Сейчас нет на сайте
Цитата Ranger ()
пруфлинк...............

Самый первый урок по юнити: http://unity3d.com/ru/learn/tutorials/projects/roll-a-ball/collecting-pick-up-objects?playlist=17141
Там чел расставил кубы на сцене, сделал их триггерами и вращает кодом. Потом на 13:16 говорит следующее:
We have made one small mistake,
and this is related to how Unity
optimises it's physics.
As a performance optimisation Unity
calculates all the volumes
of all the static colliders in a scene
and holds this information in a cache.
This makes sense as static colliders
shouldn't move, and this saves recalculating this
information every frame.
Where we have made our mistake is by rotating our cubes.
Any time we move, rotate, or scale a static collider
Unity will recalculate all the static colliders again
and update the static collider cache.

To recalculate the cache takes resources.
We can move, rotate or scale dynamic
colliders as often as we want and Unity won't
recache any collider volumes.
Unity expects us to move colliders.
We simply need to indicate to Unity which
colliders are dynamic before we move them.
We do this by using the rigid body component.
RangerДата: Воскресенье, 14 Февраля 2016, 20:34 | Сообщение # 12
почти ветеран
Сейчас нет на сайте
argc, Завтра сделаю бенчмарк.
Посмотрим............


berilДата: Воскресенье, 14 Февраля 2016, 22:40 | Сообщение # 13
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Цитата Ranger ()
argc, Завтра сделаю бенчмарк.
Посмотрим............

Да мне тоже интересно, сделай пожалуйста, если не тяжко smile




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
OpenGOOДата: Понедельник, 15 Февраля 2016, 02:18 | Сообщение # 14
почти ветеран
Сейчас нет на сайте
Немного по теме
Цитата
Moving Static Colliders

Moving Static Colliders will be a lot less expensive. A Static Collider is just a gameobject with a collider component on it, but without a Rigidbody component. Previously, since the SDK assumed that Static Colliders aren’t moved, moving a Static Collider would trigger an expensive AABB tree rebuild that affected overall performance badly.

In Unity 5, we’ll use the same data structure to handle the movement of both dynamic and static colliders. Unfortunately, we’ll lose the benefit of Static Colliders consuming less memory than dynamic ones. However, right now, the cost associated with moving Static Colliders is one of the top 3 causes of performance issues in Unity games. We wanted to change that.

High-performance physics in Unity 5


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

[GameMaker: Studio v1.4.9999]
RangerДата: Понедельник, 15 Февраля 2016, 05:39 | Сообщение # 15
почти ветеран
Сейчас нет на сайте
Перемещающиеся, вращающиеся кубы


KamiRoninДата: Понедельник, 15 Февраля 2016, 08:35 | Сообщение # 16
почти ветеран
Сейчас нет на сайте
Ranger, молодчик!! не поленился, сделал!
Вооот оказывается то как, да?! )

Но.. от 5.1 fps до 6.1 fps разбег, при 2к объектов, на машинах с видяхой прежнего поколения (ну такое впечатление складывается по показателям), это действительно весомый аргумент!
В теме про одну движущуюся кнопку...

Ну да.. ну да.. дело принципа и концептуального видинья вопроса, я понимаю. :D
Все равно молоток!!


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Понедельник, 15 Февраля 2016, 09:11
VerdCSДата: Понедельник, 15 Февраля 2016, 08:46 | Сообщение # 17
частый гость
Сейчас нет на сайте
Ranger, спасибо за бенчмарк. Странно но выходит что сам факт наличия rigidbody наносит больший урон производительности, чем его отсутствие, даже с учётом перекеширования. Какая же тогда от кеширования польза?
RangerДата: Понедельник, 15 Февраля 2016, 09:49 | Сообщение # 18
почти ветеран
Сейчас нет на сайте
VerdCS,
2000 ригидбоди - это тож не хухры-мухры..
Для чистоты эксперимента можно было бы покрутить всего пару объектов со сложной геометрией коллайдеров. 100k tris+
Но по быстрому не нашел что-нибудь что можно вставить.
а делать комбинированный меш из тех же кубов... чет заломало.
В принципе даже здесь видно, что отсутствие RB не оказывает негативного воздействия на утилизацию CPU


NightLordДата: Понедельник, 15 Февраля 2016, 11:01 | Сообщение # 19
участник
Сейчас нет на сайте
В Unity 5 физика новая, замуты с RB были важны в более старых версиях) Сейчас же грабли убрали.
Вот весьма полезный доклад по новой физике: http://www.youtube.com/watch?v=ftGCEsD69cw


Часто стоишь в пробке или очереди? Эта игра поможет скоротать время 7Bricks - головоломка с цифрами.
VerdCSДата: Понедельник, 15 Февраля 2016, 11:39 | Сообщение # 20
частый гость
Сейчас нет на сайте
Ranger, повторил эксперимент с 2к кубов. Делал сборный коллайдер из 10 компонентов. Результат аналогичный, так что rigidbody всё таки не стоит добавлять там где он не требуется.

NightLord, спасибо за наводку, доклад отличный, а загадка, похоже, решена)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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