UnityEngine.Object クラスは、Unity エディターで参照できるすべてのオブジェクトの基本クラスです。UnityEngine.Object から継承したクラスを Inspector のフィールドにドラッグアンドドロップするか、オブジェクトフィールドの横にあるオブジェクトピッカーを使用して選択できます。
通常は、独自のカスタムクラスの Object から直接継承するよりも、目的に合わせて設計されたクラスから継承します。
例:
GameObject に追加して、GameObject の動作を制御したり関連する機能を提供したりするカスタムコンポーネントを記述したい場合は、MonoBehaviour を継承します。ScriptableObject を継承します。これらはどちらも UnityEngine.Object を継承していますが、目的に合わせて追加の機能を提供します。
ノート: UnityEngine.Object は .NET の基本クラスである System.Object とは異なります。名前が競合しないようにデフォルトのスクリプトテンプレートには含まれていません。ただし、Inspector で割り当てる必要のないクラスを作成したい場合は、.NET の System.Object を継承できます。
Object クラスは、オブジェクトをインスタンス化および破棄するためのメソッドや、特定の型のオブジェクトへの参照を検索するためのメソッドを提供します。Object クラスの API の詳細は、Object のスクリプトリファレンス を参照してください。
UnityEngine.Object は Unity の特殊な型の C# オブジェクトです。対応するアンマネージ (C++) オブジェクトにリンクされているためです。例えば、Camera コンポーネントを使用する際、Unity はオブジェクトの状態を C# オブジェクト自体ではなく、対応する C++ オブジェクト上に保存します。
Unity は現在、UnityEngine.Object のインスタンスでの C# WeakReference クラスの使用をサポートしていません。そのため、ロードされたアセットの参照に WeakReference は使用しないでください。WeakReference クラスの詳細については、Microsoft の WeakReference に関するドキュメント を参照してください。
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 に対してこれらの演算子を使用しても、等式演算子や不等式演算子と同じ結果は得られません。