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