物理性能分析器 (Physics Profiler)
Physics Profiler 顯示物理引擎在場景中已處理的物理統(tǒng)計(jì)信息。此信息有助于診斷和解決與場景中的物理相關(guān)的性能問題或意外差異。
另請(qǐng)參閱物理調(diào)試可視化。

屬性
屬性????????????????????????????????????????????????????????功能
Active Dynamic??????????非睡眠的非運(yùn)動(dòng)剛體組件的數(shù)量。
Active Kinematic????????非睡眠的運(yùn)動(dòng)剛體組件的數(shù)量。請(qǐng)注意,已附加關(guān)節(jié)的運(yùn)動(dòng)剛體組件可能每幀被處理多次,這會(huì)計(jì)入顯示的數(shù)量中。在幀中調(diào)用?MovePosition?或?MoveRotation?時(shí),運(yùn)動(dòng)剛體處于活動(dòng)狀態(tài),并在下一幀中保持活動(dòng)狀態(tài)。
Static Colliders????????????未附加剛體組件或父游戲?qū)ο笪锤郊觿傮w組件的游戲?qū)ο笊系呐鲎搀w組件數(shù)。如果此類游戲?qū)ο蠡蚱涓赣螒驅(qū)ο缶哂袆傮w組件,則碰撞體將不計(jì)為靜態(tài)碰撞體。這些碰撞器稱為復(fù)合碰撞體。這有助于以方便的方式排列多個(gè)碰撞體,而不是將所有碰撞體放在與剛體組件相同的游戲?qū)ο笊稀?/p>
Rigidbody????????????????????????物理引擎處理的剛體組件數(shù)量(與組件的睡眠狀態(tài)無關(guān))。
Trigger Overlaps?????????????重疊觸發(fā)器的數(shù)量(成對(duì)計(jì)數(shù))。
Active Constraints??????????物理引擎處理的原始約束的數(shù)量。約束用作關(guān)節(jié)的構(gòu)建塊以及碰撞響應(yīng)。例如,限制?ConfigurableJoint?的線性或旋轉(zhuǎn)自由度涉及每個(gè)限制的基本約束。
Contacts????????????????????????????場景中所有碰撞體之間的觸點(diǎn)對(duì)總數(shù),也包括觸發(fā)器重疊對(duì)的數(shù)量。請(qǐng)注意,一旦每個(gè)碰撞體對(duì)之間的距離低于特定的用戶可配置限制,該碰撞體對(duì)就會(huì)創(chuàng)建一個(gè)觸點(diǎn)對(duì),因此可能會(huì)看到針對(duì)尚未接觸或重疊的剛體組件生成的觸點(diǎn)。有關(guān)更多詳細(xì)信息,請(qǐng)參閱?Collider.contactOffset?和?ContactPoint.separation。
注意:
這些數(shù)字可能與場景中具有物理組件的游戲?qū)ο蟮拇_切數(shù)量不對(duì)應(yīng)。這是因?yàn)橛行┪锢斫M件以不同的速率處理,具體取決于其他組件產(chǎn)生的影響(例如,附加的關(guān)節(jié)組件)。要計(jì)算附加了特定物理組件的游戲?qū)ο蟮拇_切數(shù)量,請(qǐng)使用?FindObjectsOfType?函數(shù)編寫自定義腳本。
Physics Profiler 不顯示睡眠剛體組件的數(shù)量。這些是與物理引擎無關(guān)的組件,因此不由 Physics Profiler 處理。
使用 Physics Profiler 了解性能問題
物理模擬在主邏輯更新循環(huán)的單獨(dú)固定頻率更新周期中運(yùn)行,只能通過每次調(diào)用的?Time.fixedDeltaTime
?推進(jìn)時(shí)間。這類似于?Update()
?和?FixedUpdate()
?之間的區(qū)別(有關(guān)更多信息,請(qǐng)參閱關(guān)于?Time Manager?的文檔)。
當(dāng)出現(xiàn)需要很長時(shí)間的復(fù)雜邏輯或圖形幀時(shí),Physics Profiler 必須每幀多次調(diào)用物理模擬。這意味著已經(jīng)占用大量資源的幀會(huì)占用更多的時(shí)間和資源,這很容易導(dǎo)致物理模擬因?yàn)?Maximum Allowed Timestep?值(可在?Edit?>?Project Settings?>?Time?中設(shè)置)而暫時(shí)停止。
可在項(xiàng)目中檢測到這一點(diǎn),方法是選擇?CPU Usage Profiler?并在?Overview?部分中檢查?Physics.Processing?或?Physics.Simulate?的調(diào)用次數(shù)。

在此示例圖中,__Calls__ 列中的值 1 表示物理模擬在最后一個(gè)邏輯幀上被調(diào)用一次。
調(diào)用計(jì)數(shù)接近 10 可能表示存在問題。第一種解決方案是降低物理模擬的頻率;如果問題仍然存在,請(qǐng)檢查在 Physics Profiler 必須使用大量模擬調(diào)用以便追趕游戲時(shí)間之前可能是什么原因?qū)е铝舜笮蛶?。有時(shí),大型的圖形幀可能會(huì)導(dǎo)致稍后在場景中進(jìn)行更多物理模擬調(diào)用。
如需了解場景中的物理模擬的更多詳細(xì)信息,請(qǐng)單擊三角形箭頭以展開 __Physics.Processing__,如上面的截屏所示。此時(shí)可看到為更新場景而運(yùn)行的物理引擎任務(wù)的實(shí)際名稱。可能會(huì)看到的兩個(gè)最常見的名稱為:
__Pxs__:“PhysX 解算器”(PhysX solver) 的縮寫,是關(guān)節(jié)所需的以及用于解算重疊體觸點(diǎn)的物理引擎任務(wù)。
__ScScene__:更新場景、運(yùn)行寬階段和窄階段以及整合剛體(由于力和沖量將它們移動(dòng)到空間中)所需的任務(wù)。請(qǐng)參閱?Steven M. LaValle 的“規(guī)劃算法”(Planning Algorithms)?了解兩階段碰撞檢測階段的定義。