はじめに
Unityを触る機会ができたのですが、基底クラスがいまいち把握できていないので、Unityでよく登場するクラスをまとめてみました。
基本のクラスたち
Object
Unity独自の基底クラスとしてUnityEngine.Object
が用意されています。
ここで==
!=
のオーバーロードが行われていて、独特のFake Nullな判定が定義されています。
public class Object { }
GameObject
, Component
恐らく自分が一番理解できていない部分です。
GameObject
がComponent
(個々の部品)の塊のようなイメージでいいんですかね?
色々と違いはありますが、共通するメソッドやプロパティが多いのがこの2クラス。
public sealed class GameObject : Object { }
public class Component : Object { }
MonoBehaviour
Unity上でスクリプト作成するとこのクラスを基底としたクラスのコードが生成されます。
エディタ上でScriptとして扱われるものはこのクラスを継承していないといけない、というのが自分の理解。
public class MonoBehaviour : Behaviour { }
public class Behaviour : Component { }
Transform
ここから少し細かいクラスですが、オブジェクトの座標的な情報を扱うTransform
クラスもComponent
です。
public class Transform : Component, IEnumerable { }
Scene
Scene
は何故か構造体ですね。
部品というのには大きいので、Component
を継承していないのは分かるのですが、何故構造体なんでしょう?
public struct Scene { }
Coroutine
これもUnityを触ってギャップを感じるCoroutine
クラス。
YieldInstruction
というクラスを介して独自の継承階層です。
public sealed class Coroutine : YieldInstruction { }
public class YieldInstruction { }
継承階層
ということで、ここまで挙げたクラスの継承階層を簡単に示してみるとこんな感じ。
-
Object
-
GameObject
(sealed) -
Component
Transform
-
Behaviour
MonoBehaviour
-
-
Scene
(struct) -
YieldInstruction
-
Coroutine
(sealed)
-
おわりに
初歩的な内容ですが、基底クラスがUnityEngine.Object
のものとそうでないものがあるので、その違いは覚えておくと役に立ちそうです。