在Unity中优化物理

Unity的Оптимизируемработусфизикой

统一的Всеигровыеобъекты, DefaultDefault版本为。 Однакомыможемобозначить,чтосчемдолжновзаимодействовать,определивразныеслоидоядляразныхт。 ДлякаждогоновогослоядобавляютсясвоистрокаистолбецвМатрицеКоллизий, Поумолчанию,когдавыдобавляетеновыйслой,МатрицаКоллизийопределяетстолкновениоотослоя ПутёмправильнойнастройкислоевиМатрицыКоллизийвыизбежитенезапланированныхстолеенийсм

Дляцелейданнойбыласозданапростаядемо-сценас2 000объектов(1 000красныхи1 000зелёных)внутри。 Зелёныеобъектыдолжнывзаимодействоватьтолькосамиссобойисостенами(слойWall)。 Водномизтестоввренатл Default Вдругомтестеобъектыразделенынадваслоя。 ВзаимодействиеэтихслоёвбылонастроеновМатрицеКоллизий。

Рис。 1:НастройкаМатрицыКоллизий

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

Рис。 2:Количествостолкновенийвтечение5секунд

Вотрезультатпрофилировкидляболееконкретныхданныхофизическомдвижке

Рис。 3:Общиеслоивсравнениисотдельнымивданныхпрофилировки

Какмывидим,существуютзначительныеразличиявовремени,котороепроцессоопотратилнафизику。 Наобщемслоеэто〜27,7мс,以及натотдельных—〜17.6мс。

Рейкастинг

Рейкастинг—图库视频影像Монныйимощныйинструментвфизическомдвижке。 Онпозволяетнаправлятьлучопределённоодлинывопределённомнаправлениииполучитоинформаиие Однакоэтодорогостоящаяоперация。 Производительностьрейкастингасильнозависитотдлинылучаитиповколлайдеровнасцене。

Вотнесколькосоветовпоиспользованиюрейкастинга:

  • Хотьэтоиочевидно,нонужностремитьсякнаименьшемуколичествулучей。
  • Неделайтелучидлиннее,чемэтонеобходимо。 ,емдлиннеелуч,тембольшеобъектовнужнопроверятьнастолкновениесним。
  • FixedUpdate() 。 АвнекоторыхслучаяхдажеиспользованиеихвнутриметодаUpdate Update()从此开始。
  • Будьтеосторожнеестипамиколлайдеров,которыеиспользуете。 Рейкастингсмеш-коллайдеромобходитсядовольнодорого。
  • Неплохоерешение—создатьдочернийобъектспримитивнымиколлайдерамииповторитьсихпомощьюпо。 刚体刚体ведутсебякаксоставныеколлайдеры。
  • Есливамоченьнужноиспользоватьмеш-коллайдеры,токакминимумсделайтеихвыпуклыми。
  • Уточняйте,вочтоименнолучдолженпопадать,иповозможностиконкретизируйтеслой-ааккивфун。
  • Хотьэтоиописанов,нонезабудьте,чтото,чтовыуказываетевфункаиа
  • Есливыхотите,чтобылучсталкивалсясобъектом,которыйнаходитсянаслоесидентификатором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。 Изменяяэтозначение,выможетедостигнутьзолотойсерединымеждуточностьюивременем,затрин。

Заключение

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