C#
.NET
Unity
初心者
ライブラリ

Unity C# クラス構造が分からなくなるので、基本のクラスをまとめてみた

はじめに

Unityを触る機会ができたのですが、基底クラスがいまいち把握できていないので、Unityでよく登場するクラスをまとめてみました

基本のクラスたち

Object

Unity独自の基底クラスとしてUnityEngine.Objectが用意されています。
ここで== !=のオーバーロードが行われていて、独特のFake Nullな判定が定義されています。

UnityEngine.Object
    public class Object { }

GameObject, Component

恐らく自分が一番理解できていない部分です。
GameObjectComponent(個々の部品)の塊のようなイメージでいいんですかね?
色々と違いはありますが、共通するメソッドやプロパティが多いのがこの2クラス。

UnityEngine.GameObject
    public sealed class GameObject : Object { }
UnityEngine.Component
    public class Component : Object { }

MonoBehaviour

Unity上でスクリプト作成するとこのクラスを基底としたクラスのコードが生成されます。
エディタ上でScriptとして扱われるものはこのクラスを継承していないといけない、というのが自分の理解。

UnityEngine.MonoBehaviour
    public class MonoBehaviour : Behaviour { }
    public class Behaviour : Component { }

Transform

ここから少し細かいクラスですが、オブジェクトの座標的な情報を扱うTransformクラスもComponentです。

UnityEngine.Transform
    public class Transform : Component, IEnumerable { }

Scene

Sceneは何故か構造体ですね。
部品というのには大きいので、Componentを継承していないのは分かるのですが、何故構造体なんでしょう?

UnityEngine.SceneManagement.Scene
    public struct Scene { }

Coroutine

これもUnityを触ってギャップを感じるCoroutineクラス。
YieldInstructionというクラスを介して独自の継承階層です。

UnityEngine.Coroutine
    public sealed class Coroutine : YieldInstruction { }
    public class YieldInstruction { }

継承階層

ということで、ここまで挙げたクラスの継承階層を簡単に示してみるとこんな感じ。

  • Object
    • GameObject (sealed)
    • Component
      • Transform
      • Behaviour
        • MonoBehaviour
  • Scene (struct)
  • YieldInstruction
    • Coroutine (sealed)

おわりに

初歩的な内容ですが、基底クラスがUnityEngine.Objectのものとそうでないものがあるので、その違いは覚えておくと役に立ちそうです。