Unity の UnityEngine 名前空間には、 Object というクラスがあります。これは Unity がエディターで参照するすべてのオブジェクトの基本クラスです。UnityEngine.Object を継承するクラスには特別な機能があるため、オブジェクトを Inspector のフィールドにドラッグアンドドロップしたり、Object フィールドの横にあるオブジェクトピッカーを使って選択することができます。
このページでは、Object クラスの概要と、Object クラスを使ってスクリプトを作成する際の一般的な使い方について説明します。Object クラスのすべてのメンバーの詳細なリファレンスについては、Object のスクリプトリファレンス を参照してください。
スクリプトで独自のオブジェクトを作成する場合、通常 Object から直接継承することは避けたいものです。その代わりに、目的に合わせて設計されたクラスを継承する必要があります。
例えば、ゲームオブジェクトに追加して、その動作を制御したり、ゲームオブジェクトに関連する機能を提供するカスタムコンポーネントを記述したい場合は、MonoBehaviour を継承する必要があります。
また、シリアル化されたデータを保存できるカスタムアセットを作成したい場合は、ScriptableObject を継承する必要があります。これらはどちらも Unity の Object クラスを継承していますが、目的に合わせて機能を提供します。
ノート: Unity の Object クラスは、UnityEngine 名前空間にあります。これは、.NET のベースとなる Object クラスとは異なります。.NET の Object クラスは同じ名前ですが、System 名前空間であり、デフォルトのスクリプトテンプレートには含まれていません。そのため、名前が競合することはありません。Inspector で割り当てる必要のないクラスをスクリプトで作成したい場合は、.NET の System.Object からクラスを継承することができます。
Unity の Object クラスは、 GameObject、Component、Material、Texture、Mesh、Sprite など、Unity のほとんどのビルトインクラスの基本クラスとして機能します。つまり、これらの型はすべて、Inspector のこれらの参照フィールドにドラッグアンドドロップすることができます。
Inspector のフィールドに特定の型のクラス (Texture など) が指定されている場合、Unity はそのフィールドに他の型のオブジェクトをドロップできないように制限します。そのため、オブジェクトピッカーは正しい型のオブジェクトのみを表示します。
上の画像では、Inspector に 3 種類のオブジェクトフィールドが表示されています。
1 つ目の型は Object で、Unity のあらゆるオブジェクトがこのフィールドに割り当てられます。このフィールドには、GameObject、Texture、Audio Clip など、あらゆる型のオブジェクトをドロップすることができます。これは通常、あまり役に立ちません。フィールドが何を受け入れるべきか、もっと具体的にした方が良いでしょう。
2 つ目は、かっこ内に示されているように、その型が “Texture” であることを示しています。Texture は Unity のビルトインクラスで、つまり、任意のテクスチャアセットをこのフィールドにドロップできることを意味しています。Unity にはこれを継承する Texture2D と RenderTexture という 2 つのクラスがあり、これらの型のいずれかをこのフィールドにドロップできます。
3 つ目はその型が “Food” であることを示しています。この名前の Unity のビルトインクラスはありません。つまり、この例は、 Object を継承するユーザーが独自に作成したクラスを示しています。後に、“Apple” や “Banana” など、“Food” を継承するクラスを作成すると、これらのクラスのインスタンスへの参照を Food フィールドに割り当てることができます。なぜなら、“Apple” や “Banana” は、その型を継承しているからです。
Object クラスにはいくつかのメソッドが用意されており、適切に Instantiate や Destroy を行ったり、特定の型のオブジェクトへの参照を見つけたりすることができます。
Object クラスの API の詳細については、Object のスクリプトリファレンスを参照してください。