ドキュメント

Unity Engine

Unity Engine

オブジェクト

UnityEngine.Object is the base class for all objects the Editor can reference from fields in the Inspector window.
読み終わるまでの所要時間 6 分最終更新 1ヶ月前

UnityEngine.Object
クラスは、Unity エディターで参照できるすべてのオブジェクトの基本クラスです。
UnityEngine.Object
から継承したクラスを Inspector のフィールドにドラッグアンドドロップするか、オブジェクトフィールドの横にあるオブジェクトピッカーを使用して選択できます。

Inspector ウィンドウのオブジェクトフィールドの例。オブジェクトピッカーは、フィールドの右側にある丸いアイコンです。

通常は、独自のカスタムクラスの
Object
から直接継承するよりも、目的に合わせて設計されたクラスから継承します。 例:
  • 例えば、
    GameObject
    に追加して、
    GameObject
    の動作を制御したり関連する機能を提供したりするカスタムコンポーネントを記述したい場合は、
    MonoBehaviour
    を継承します。
  • シリアル化されたデータを保存できるカスタムアセットを作成したい場合は、
    ScriptableObject
    を継承します。
これらはどちらも
UnityEngine.Object
を継承していますが、目的に合わせて追加の機能を提供します。
ノート:
UnityEngine.Object
は .NET の基本クラスである
System.Object
とは異なります。名前が競合しないようにデフォルトのスクリプトテンプレートには含まれていません。ただし、Inspector で割り当てる必要のないクラスを作成したい場合は、.NET の
System.Object
を継承できます。
Object
クラスは、オブジェクトをインスタンス化および破棄するためのメソッドや、特定の型のオブジェクトへの参照を検索するためのメソッドを提供します。Object クラスの API の詳細は、Object のスクリプトリファレンス を参照してください。

UnityEngine.Object の特殊な動作

UnityEngine.Object
は Unity の特殊な型の C# オブジェクトです。対応するアンマネージ (C++) オブジェクトにリンクされているためです。例えば、Camera コンポーネントを使用する際、Unity はオブジェクトの状態を C# オブジェクト自体ではなく、対応する C++ オブジェクト上に保存します。
Unity は現在、
UnityEngine.Object
のインスタンスでの C#
WeakReference
クラスの使用をサポートしていません。そのため、ロードされたアセットの参照に
WeakReference
は使用しないでください。
WeakReference
クラスの詳細については、Microsoft の WeakReference に関するドキュメント を参照してください。

Unity C# と Unity C++ は UnityEngine オブジェクトを共有

Object.Destroy や Object.DestroyImmediate などのメソッドを使用して
UnityEngine.Object
から派生したオブジェクトを破棄すると、Unity は C++ の対応するオブジェクトを破棄 (アンロード) します。ガベージコレクターがメモリを管理しているため、明示的な呼び出しで C# オブジェクトを破棄することはできません。マネージオブジェクトへの参照がなくなると、ガベージコレクターがオブジェクトを回収して破棄します。
破棄された
UnityEngine.Object
にアプリケーションが再びアクセスしようとする場合、Unity はほとんどの型のネイティブの対応するオブジェクトを再作成します。この再作成動作の 2 つの例外は、MonoBehaviour と ScriptableObjects です。これらは一度破棄されると、リロードできません。
MonoBehaviour
と
ScriptableObject
は、等号 (==) と不等号 (!=) 演算子をオーバーライドします。つまり、破棄された
MonoBehaviour
や
ScriptableObject
と
null
を比較すると、マネージオブジェクトがまだ存在し、ガベージコレクションされていなければ、演算子は true を返します。
?? 演算子と ?. 演算子はオーバーロードできないため、
UnityEngine.Object
から派生したオブジェクトとは互換性がありません。マネージオブジェクトがまだ存在するときに、破棄された
MonoBehaviour
や
ScriptableObject
に対してこれらの演算子を使用しても、等式演算子や不等式演算子と同じ結果は得られません。

追加リソース