MonoBehaviourはBehaviorを拡張し、BehaviorはComponentを拡張します。これらのクラスが分離されている理由と、これらのクラスの意味的な意味を知りたいです。これらのクラスを分離する目的はありますか?また、BehaviorまたはComponentを直接拡張するクラスはありますか?
UnityでC#コードを作成するには、MonoBehaviourを使用する必要があることを私は知っています。しかし、私はゲームエンジンとしてのUnityのアーキテクチャに興味があります。
コンポーネント:
Component
は、Behaviour
とMonoBehaviour
の両方の基本クラスです。これは、GameObjectにアタッチできる任意のスクリプトの基本クラスです。
これは、ほとんどすべてのUnity build-inスクリプトの派生元です。これには、Collider
とRigidbody
が含まれます。
動作:
Behaviour
について知っておくべき最も重要なことは、それを継承するものはすべて有効または無効にできるということです。スクリプトを有効/無効にしたくない場合は、これからスクリプトを継承しないでください。
たとえば、Rigidbody
を有効/無効にすることはできません。これが、Component
ではなくBehaviour
クラスから継承する理由です。
Behaviour
はComponent
から継承します。
MonoBehaviour:
MonoBehaviour
について注意すべき最も重要なことは、コルーチン、呼び出し、または物理OnCollisionEnter
関数、Start
、などのUnityコールバック関数を使用する必要がある場合に必要になることです。 OnEnable
、OnDisable
など。
MonoBehaviour
はBehaviour
を継承しているため、スクリプトを有効/無効にできます。
これらのクラスを分離する目的はありますか?
はい、上記の回答のように、適切なコンポーネントから継承することでさまざまな機能を使用できるように、それらは分離されています。
コルーチン、Invoke
、InvokeRepeating
が必要で、スクリプトを有効/無効にできるようにしますか? MonoBehaviour
から継承を使用します。
スクリプトを有効または無効にできるようにしたいが、コルーチン、Invoke
、InvokeRepeating
は必要ありませんか? Behaviour
を使用します。
決して有効化/無効化してはならないスクリプトがある場合、それはComponent
から継承する必要があります。
Behaviour
とComponent
は、Unityによって内部的なものとして使用されることに注意してください。これらからスクリプトを継承しようとしないでください。
これらを分離する主な理由は、メモリを節約し、各コンポーネントのコードを保守しやすくするためです。これは、めったに使用しない機能の数千行のコードを記述するよりも優れています。それらを分離し、それらがメモリにロードされるとき、それらは実際に使用されており、メモリ内のスペースを無駄にしません。
また、BehaviorまたはComponentを直接拡張するクラスはありますか?
はい。
MonoBehaviour
はBehaviour
から直接継承し、次にComponent
から継承します。
Collider
はComponent
から直接継承します。次に、BoxCollider
やSphereCollider
などの非ベースコライダーはそのCollider
から継承します。