【Unity】FindFirstObjectByTypeとFindAnyObjectByTypeの違い
両方ともUnityで特定のタイプのオブジェクトを検索するためのメソッドです
ここでは、それぞれの内部構成から追加わけを見ていきましょう
使い分け
これまでFindObjectByTypeメソッド(旧バージョン)を使っていたところには、FindAnyObjectByTypeを使えば良いでしょう
FindFirstObjectByType
このメソッドは、指定されたタイプの最初に見つかったアクティブなロードされたオブジェクトを返します。特に、オブジェクトのインスタンスIDが最も低いオブジェクトを返すため、一貫性がありますが、この関数は非常にリソースを消費するため、毎フレームでの使用は推奨されません。主にシングルトンパターンに使用されることが多いです。
非アクティブなインスタンスを含めない
OtherScript instance = FindFirstObjectByType<OtherScript>();
OtherScript instance = FindFirstObjectByType<OtherScript>(FindObjectsInactive.Exclude);
非アクティブなインスタンスも含める
OtherScript instance = FindFirstObjectByType<OtherScript>(FindObjectsInactive.Include);
FindAnyObjectByType
このメソッドは、指定されたタイプの任意のアクティブなロードされたオブジェクトを返します。返されるオブジェクトは毎回異なる可能性があるため、特定のインスタンスを必要としない場合に適しています。この関数はFindFirstObjectByType
よりも高速であるため、パフォーマンスが重要な場合に有用です。
非アクティブなインスタンスを含めない
OtherScript instance = FindAnyObjectByType<OtherScript>();
OtherScript instance = FindAnyObjectByType<OtherScript>(FindObjectsInactive.Exclude);
非アクティブなインスタンスも含める
OtherScript instance = FindAnyObjectByType<OtherScript>(FindObjectsInactive.Include);
どちらの関数も使用する際は、そのコストと使用シナリオを考慮することが重要です。特定のオブジェクトの最初のインスタンスが必要な場合はFindFirstObjectByType
を、どのインスタンスでも問題ない場合はFindAnyObjectByType
を選択すると良いでしょう。
(旧バージョン)FindObjectOfType
このメソッドは、指定された型のオブジェクトの中で、アクティブなシーン上の最初に見つかったインスタンスを返します。具体的には、シーン内のすべてのアクティブなオブジェクトを調べて、指定された型に一致する最初のものを見つけ出します。このメソッドは使いやすい一方で、シーン内のオブジェクト数が多い場合にはパフォーマンスに影響を与える可能性があります。現在は上記FindFirstObjectByTypeに置き換えが推奨されます
詳細はUnityの公式ドキュメントで確認できます:
ディスカッション
コメント一覧
まだ、コメントがありません