Unity的Оптимизируемработусфизикой
统一的Всеигровыеобъекты, Default
, Default
版本为。 Однакомыможемобозначить,чтосчемдолжновзаимодействовать,определивразныеслоидоядляразныхт。 ДлякаждогоновогослоядобавляютсясвоистрокаистолбецвМатрицеКоллизий, Поумолчанию,когдавыдобавляетеновыйслой,МатрицаКоллизийопределяетстолкновениоотослоя ПутёмправильнойнастройкислоевиМатрицыКоллизийвыизбежитенезапланированныхстолеенийсм
Дляцелейданнойбыласозданапростаядемо-сценас2 000объектов(1 000красныхи1 000зелёных)внутри。 Зелёныеобъектыдолжнывзаимодействоватьтолькосамиссобойисостенами(слойWall)。 Водномизтестоввренатл Default
Вдругомтестеобъектыразделенынадваслоя。 ВзаимодействиеэтихслоёвбылонастроеновМатрицеКоллизий。

Рис。 1:НастройкаМатрицыКоллизий
Изображениенижеберётсяизсамойдемонстрации。 Внейестьпростойменеджер,которыйсчитаетколичествостолкновенийиавтоматическиостанавливаессп。 Количествоненужныхстолкновенийввариантесобщимслоемвпечатляет。

Рис。 2:Количествостолкновенийвтечение5секунд
Вотрезультатпрофилировкидляболееконкретныхданныхофизическомдвижке

Рис。 3:Общиеслоивсравнениисотдельнымивданныхпрофилировки
Какмывидим,существуютзначительныеразличиявовремени,котороепроцессоопотратилнафизику。 Наобщемслоеэто〜27,7мс,以及натотдельных—〜17.6мс。
Рейкастинг
Рейкастинг—图库视频影像Монныйимощныйинструментвфизическомдвижке。 Онпозволяетнаправлятьлучопределённоодлинывопределённомнаправлениииполучитоинформаиие Однакоэтодорогостоящаяоперация。 Производительностьрейкастингасильнозависитотдлинылучаитиповколлайдеровнасцене。
Вотнесколькосоветовпоиспользованиюрейкастинга:
- Хотьэтоиочевидно,нонужностремитьсякнаименьшемуколичествулучей。
- Неделайтелучидлиннее,чемэтонеобходимо。 ,емдлиннеелуч,тембольшеобъектовнужнопроверятьнастолкновениесним。
-
FixedUpdate()
。 АвнекоторыхслучаяхдажеиспользованиеихвнутриметодаUpdateUpdate()
从此开始。 - Будьтеосторожнеестипамиколлайдеров,которыеиспользуете。 Рейкастингсмеш-коллайдеромобходитсядовольнодорого。
- Неплохоерешение—создатьдочернийобъектспримитивнымиколлайдерамииповторитьсихпомощьюпо。 刚体刚体ведутсебякаксоставныеколлайдеры。
- Есливамоченьнужноиспользоватьмеш-коллайдеры,токакминимумсделайтеихвыпуклыми。
- Уточняйте,вочтоименнолучдолженпопадать,иповозможностиконкретизируйтеслой-ааккивфун。
- Хотьэтоиописанов,нонезабудьте,чтото,чтовыуказываетевфункаиа
- Есливыхотите,чтобылучсталкивалсясобъектом,которыйнаходитсянаслоесидентификатором10,вамнеобходимоуказать1 << 10(битовыйсдвигвлевона10),анепросто10。
- Есливыхотите,чтобылучврезалсявовсё,кромеобъектовнаслое10,топростоиспользуйтепобитовыйоператордополнения(〜),которыйинвертируеткаждыйбитвпобитовоймаске。
Вотпростаядемо-сцена,гдеобъектстреляетлучами,которыесталкиваютсятолькосзелёнымиобъекта。

Рис。 4:Простаядемо-сценасрейкастами
Здесьведётсяуправлениеколичествомидлинойлучей,чтобыполучитьданныепрофилировки。 Мыможемувидетьнаграфикенижезависимостьпроизводительностистойдлинойлучейиихколичество,

Рис。 5:Зависимостьпроизводительностиотколичествалучей

Рис。 6:Зависимостьпроизводительностиотдлинылучей
Авотчтобудет,еслипоменятьпримитивныеколлайдерынамеш-коллайдеры。

Рис。 7:Меш-коллайдерынасцене(110полигоновнаколлайдер)

Рис。 8:Примитивныеколлайдерывсравнениисмеш-коллайдерамивданныхпрофилировки
Каквыможетевидетьнаданныхпрофилировки,рейкастингмеш-коллайдеровзаставляетфизиееквитодвижок。
Физика2D和3D
Решите,какойфизическийдвижоклучшеподходитдлявашегопроекта。 Есливыразрабатываете2D-игруили2.5D(псевдотрёхмерность),тоиспользованиефизическогодвижкедля Дополнительноеизмерениеввашемпроектевпустуюзагружаетпроцессоо。 Выможетепосмотретьболеедетальныеразличиямеждудвумядвижкамивстатье。
刚体
刚体—刚体—этопривычныйкомпонентдляфизическихвзаимодействиймеждуобъектами。 Дажекогдавыработаетесколлайдеромкакстриггером,вамнужнодобавитьегонаигровойобъектд Игровыеобъекты,которыенеимеюткомпонента刚体,рассматриваютсякакстатическиеколлайдеры。 Этокрайневажно,т。 к。 попыткасдвинутьстатическийколлайдеркрайненеэффективна,ведьдвижокпересчитываетвесьфизич。 Ксчастью,профайлердаствнаме,есливыпопытаетесьсдвинутьстатическийколлайдере Вследующемтестебылиубраны刚体совсехдвижущихсяобъектовпервойдемо-сценыизаснятыданныепрофилировки,чтобыпродемонстрировать,каквлияютпопыткисдвинутьстатическиеколлайдеры。

Рис.9:Предупреждениеперемещениястатическихколлайдеров
Каквыможетевидеть,大约2 000предупрежденийгенерируетсянакаждомигровомобъекте。 Такжесредниезатратывремени,потраченногоЦПУнафизику,возрослис〜17,6мсдо〜35,85мс。 刚体,则为刚体。Поэтомуеслимыдвигаемигровойобъект。 刚体刚体,Есливыхотитевручнуюконтролироватьегодвижениетопростопометьтеегокак。
Фиксированныевременныеучастки(时间步长)
timestep
上的时间进度表上的时间管理器上的固定FixedUpdate()
和частотуобновленияфизики。的timestep
Настройказначенияфиксированныхtimestep。 Изменяяэтозначение,выможетедостигнутьзолотойсерединымеждуточностьюивременем,затрин。
Заключение
Всеэтиприёмыдовольнопростывреализации,ноони,несомненно,влияютнапроизводительностьвашегопроекта,ведьпочтикаждаяразрабатываемаяиграиспользуетфизическийдвижок,дажееслиэтотолькообработкаколлизий。