Mesh Visual Scripting のパフォーマンスに関するベスト プラクティス
概要
ビジュアル スクリプトは本質的に低速ではありませんが、たとえば C# コードよりも大幅に遅くなります。
環境内でビジュアル スクリプトを作成する場合は、難しく手間のかかる部分に使用するのではなく、既存の機能を接続するために使用することをお勧めします。建築で言えば、桁ではなく、接着剤を作ります。 ビジュアル スクリプトが環境の全体的なパフォーマンスに影響を与えないことを確認する最も簡単な方法は、最初の時点で何も実行していないことを確認することです。
頻度の高いスクリプト イベントと頻度の低いスクリプト イベント
Visual Scripting には、ビジュアル スクリプトのフローをトリガーするために使用できるさまざまなイベントが用意されています。
次は回避するようにします。
On Update、On Fixed Update、On Late Update、など。 これらのイベントは非常に頻繁にトリガーされ (多くの場合、フレームのレンダリングと同頻度)、スクリプトがあまり実行されない場合でも、起動するだけでオーバーヘッドが発生し、一度に多数の場所で発生した場合、環境のパフォーマンスに顕著な影響を与える可能性があります。
On Trigger Stay と On Collision Stay。 これらのイベントは特定の条件下 (物理オブジェクトが物理トリガー ボリューム内にある場合やコライダーに接触する場合など) でのみアクティブになりますが、これらの条件が指定されている限り、非常に頻繁にトリガーされます。
これらの高頻度のイベントに直接代わることのできる推奨されるものはありません。 これらは無効にされていないため、絶対に必要な場合は使用できますが、ビジュアル スクリプトで制御できる、Animator コンポーネントなどの組み込み機能を利用するか、たとえば、On State Changed イベントを使用して、アクティブではなくリアクティブになるようにスクリプト ロジックを再構築することをお勧めします。
このような頻度の高いイベントを回避できない場合は、Script Machine コンポーネント全体を不要なときには非アクティブにすることで、その影響を軽減できる可能性があります。 別のビジュアル スクリプトでは、Script Machine | Set Enabled を使用して、スクリプト グラフ全体を無効または有効にすることができます。 無効になっている間は、イベント ノードのいずれもトリガーされません。ランタイム料金はゼロです。
これらはパフォーマンスに対しては若干リスクがありますが、必要な場合もあります。
- On Collision Enter と On Collision Exit。 通常、これらのイベントは、物体がコライダーに接触した時、そしてもう一度接触しなくなったときに 1 回だけトリガーされます。 ただし、場合によっては物体が2つのコライダーの間で動かなくなることがあります。その場合は、On Collision イベントが非常に迅速に連続してトリガーされ、急激な前後のジッターが開始される可能性があります。 代わりに On Trigger イベントを使用することをお勧めします。
これらは、特定の状況で使用しても問題ありません。
On Interval イベントは、[Interval] (間隔) 設定経由で定義されたカスタマイズ可能な間隔 (1 秒に 1 回など) でスクリプト フローをトリガーできます。 [Delay] (遅延) 設定を使用すると、間隔は同じで異なる On Interval イベントの実行をずらして調整できます。
Timer ノードはイベントではありませんが、Start ポートを入力して開始されたタイマーの期間のフレームごとに 1 回、Tick ポートをトリガーします。 タイマーが実行されていない場合は、ランタイム コストはゼロになります。
これらのイベントを使用して、特定の変数、プロパティ、または条件が変更されたかどうかを継続して確認しないようにします。代わりに、On State Changed イベントを使用して、アイドル コスト ゼロで変更内容をリッスンすることをお勧めします。
これらは常に使用できます。
On State Changed イベントは、入力ポートのいずれかで値が変更された場合にのみトリガーされます。 スクリプト変数とコンポーネントのプロパティの場合、何も変更されない限り、ランタイム コストがゼロの方法で非常に効率的に実装されます。
On State Changed イベントを使用して、フレームごとに 1 回入力を再評価して変更されたかどうかを判断する必要がある、より複雑な入力 (計算結果など) を確認することもできます。 この機能を有効にするには、[Allow Polling] (ポーリングの許可) オプションを有効にする必要があります。スクリプト編集のユーザー インターフェイスにこの情報が表示され、パフォーマンスへの潜在的な影響について警告が表示されます。 それでも、On Update イベントを使用して独自のポーリング ロジックをスクリプト化するよりも、少しは効率的です。
On Dictionary Item Added と On Dictionary Item Removed は同様の方法で動作し、何も変更されない限り、ランタイム コストはゼロになります。
On Trigger Enter および On Trigger Exit イベントは、対応する On Collision イベントの潜在的なパフォーマンス上のリスクはありません (上記を参照)。