共用方式為


網格可視化腳本效能的最佳做法

概觀

視覺腳本原本就不是緩慢的,但速度明顯比 C# 程序代碼慢。

當您在環境中建立視覺腳本時,最好使用它們來連接現有的功能,而不是用於繁重的工作: 製作膠水,而不是梁。 確保視覺腳本不會影響環境的整體效能,最簡單的方式是確保它們一開始不會執行太多動作。

高低頻率腳本事件

Visual Scripting 提供廣泛的事件選擇,可用來觸發視覺腳本流程。

請嘗試避免:

  • 在 [更新]、[固定更新] 、[延遲更新] 和 [類似] 上。 這些事件會非常頻繁地觸發(通常與轉譯畫面相同),即使您的腳本沒有執行太多動作,即使只是啟動它,也會有一個額外負荷,如果環境同時發生在許多地方,可能會明顯影響環境的效能。

  • 在觸發程式停留衝突停留時。 即使這些事件只在特定條件下作用中(例如,當物理對象位於物理觸發程式磁碟區內或接觸碰撞器時),而給予這些條件時,它們會非常頻繁地觸發。

這些高頻率事件沒有直接的替代方式。 它們不會停用,因此,如果絕對必要,您可以使用它們,但我們建議您嘗試利用內建功能,例如動畫工具元件,這些功能可由視覺腳本控制,或重組腳本邏輯以反應式而非作用中,例如使用 On State Changed 事件。

如果您無法避免這些高頻率事件,您可以藉由在不需要時讓整個 腳本計算機 元件保持非使用中,以減少其影響。 另一個可視化腳本可以使用 [已啟用腳本機器 | 集] 來停用和啟用整個腳本圖形。 停用時,沒有任何事件節點會觸發,而且其運行時間成本為零。

對於效能而言,這些有點危險,但有時是必要的:

  • 在 [衝突輸入 ] 和 [衝突結束] 時。 通常,只有在物理主體接觸碰撞器時,才會觸發這些事件一次,並在它停止接觸時再次觸發。 然而,有時物理主體被卡在兩個碰撞器之間:在這種情況下,它可以開始快速來回抖動,觸發許多 在衝突 事件非常快速的連續。 建議您改用 On Trigger 事件。

在某些情況下,這些都可使用:

  • 在 [間隔] 上,可讓您以可自定義的間隔來觸發腳本流程(例如每秒一次)透過其 [間隔 ] 設定所定義。 您可以使用 [延遲] 設定來交錯執行具有相同間隔的不同 On Interval 事件。

  • 定時器節點不是事件,但會在定時器一旦輸入其 [開始] 埠來啟動定時器持續時間時,在每個畫面上觸發其刻度埠一次。 當定時器未執行時,其運行時間成本為零。

請嘗試不要使用這些事件來持續檢查特定變數、屬性或條件是否已變更,最好改用 On State Changed 事件來接聽零閑置成本的變更。

這些一律可以使用:

  • 只有在任何輸入埠變更其值時,才會在 [狀態變更 ] 上觸發。 對於腳本變數和元件屬性,只要沒有任何變更,就會以產生零運行時間成本的方式非常有效率地實作。

  • 在 [狀態變更 ] 上,也可以用來觀察更複雜的輸入(例如計算結果),要求每個畫面重新評估輸入一次,以判斷輸入是否已變更。 您必須啟用 [ 允許輪詢 ] 選項來啟用此功能;腳本編輯使用者介面會通知您這一點,並警告您潛在的效能影響。 即便如此,它仍然比使用 On Update 事件編寫自己的輪詢邏輯腳本更有效率。

  • 在 [已新增 字典專案] 和 [在字典專案移除 ] 上,會以類似的方式運作,只要沒有任何變更,運行時間成本就會為零。

  • 在 [觸發程序輸入 ] 和 [開啟觸發程序結束 ] 上,沒有對應 On Collision 事件的潛在效能危險(請參閱上圖)。

下一步