コンポーネント、ビヘイビア、モノビヘイビアの違いは何ですか? また、これらが分離されているのはなぜですか? 質問する

コンポーネント、ビヘイビア、モノビヘイビアの違いは何ですか? また、これらが分離されているのはなぜですか? 質問する

MonoBehaviourextendsBehaviourBehaviourextends ですComponent。これらのクラスが分離されている理由と、これらのクラスの意味を知りたいです。これらのクラスを分離する目的はありますか? また、直接Behaviourまたは拡張するクラスはありますかComponent?

Unity で C# コードを作成するには を使用する必要があることはわかっていますMonoBehaviour。しかし、私はゲーム エンジンとしての Unity のアーキテクチャに興味があります。

ベストアンサー1

成分:

ComponentBehaviourは、との両方の基本クラスですMonoBehaviour。これは、GameObject にアタッチできるすべてのスクリプトの基本クラスです。

これはほぼすべてのUnity組み入れるスクリプトは から派生します。これにはColliderおよび が含まれますRigidbody


行動:

最も重要なことは、Behaviourこれを継承したものはすべて有効または無効にできるということです。有効/無効にしたくない場合は、スクリプトをここから継承しないでください。

たとえば、Rigidbodyを有効/無効にすることはできません。これがComponent、 ではなく クラスから継承される理由ですBehaviour

Behaviourから継承しますComponent


モノビヘイビア:

最も重要な点は、コルーチン、呼び出し、または物理関数、、、などのMonoBehaviourUnity コールバック関数を使用する必要がある場合に必要になるということです。OnCollisionEnterStartOnEnableOnDisable

MonoBehaviourを継承してBehaviour、スクリプトを有効化/無効化できるようにします。

これらのクラスを分ける目的はありますか?

はい、上記の回答のように、適切なコンポーネントから継承することでさまざまな機能を使用できるように分離されています。

コルーチン 、 が必要でInvokeInvokeRepeatingスクリプトを有効/無効にしたい場合は、 から継承を使用しますMonoBehaviour

スクリプトを有効または無効にしたいが、コルーチンは必要ありませんInvokeInvokeRepeatingを使用してくださいBehaviour

有効化/無効化してはならないスクリプトがある場合は、 から継承する必要がありますComponent

およびBehaviourComponentUnity によって内部的に使用されることに注意してください。これらからスクリプトを継承しようとしないでください。

これらを分離する主な理由は、メモリを節約し、各コンポーネントのコードが保守しやすくなることです。これは、めったに使用されない機能のために何千行ものコードを書くよりも優れています。これらを分離してメモリにロードすると、実際に使用され、メモリのスペースが無駄になりません。

Behavior または Component を直接拡張するクラスはありますか?

はい。

  • MonoBehaviourは から直接継承しBehaviour、 は から継承しますComponent

  • Colliderは から直接継承します。そして、やComponentなどの非ベースコライダーはから継承します。BoxColliderSphereColliderCollider

おすすめ記事