2

Unity3D コーディング C# を使用してゲームに取り組んでいます。

私は純粋な OOP 環境から Unity に来たので、コンポーネントベースのアプローチは私にとって無意味でした。そのため、私たちの武器システムでは、継承ツリーとオブジェクト階層アプローチを使用して純粋に OOP を使用しました。コードに新しい機能や機能を追加するのに時間を費やすほど、この設計は柔軟性に欠けることに気づきました。そのため、今はコンポーネント ベースの設計に傾倒しています。

Mr.Jamoraがここで提案したように、継承よりも構成を優先するアプローチを使用した場合に十分かどうかを尋ねて、問題をここに投稿しました。

彼の解決策は本当に良さそうです。しかし、私が複数の武器を持っていた場合、単純に不十分であり、同じロジックを実装するとReloadIReloadable

public interface IReloadable
{
   void Reload();
}

public interface IUpgradable
{
   void Upgrade();
}

public interface IShooter
{
   void Shoot();
}

public SMG : IShooter, IReloadable
{
   void Shoot()
   {
       // shooting logic 1
   }
   void Reload()
   {
       // reloading logic 1
   }
}

public AssaultRifle : IShooter, IReloadable, IUpgradable
{
   void Shoot()
   {
       // shooting logic 2
   }
   void Upgrade()
   {
       // upgrade logic 1
   }
   void Reload()
   {
       // reloading logic 1 -- SAME LOGIC
   }
}

ご覧のとおり、コードの重複がありますが、私はそれが好きではありません。これは回避できますか?(クリーンで柔軟な方法で)

一般的に、これ (継承より構成) は、Unity で武器システムを作成するための良い方法ですか? - それとも、Unity のコンポーネント ベースのアプローチを使用して、ShooterおよびReloadableコンポーネント (スクリプト) を作成し、それらを武器のゲーム オブジェクトにアタッチする方がよいですか?

よろしくお願いします。

4

3 に答える 3

0

はい、構成は再利用可能なコードに最適であり、コードの重複やコピー ペーストを防ぎます。コンポジションは使用せず、継承とインターフェイスのみを使用しました。最善の手順は、IReloadable、Ishootable、... インターフェイス、および IReloadable、Ishootable を継承する Reloadable1、shootable1、Reloadable2、shootable2、... クラスを実装することです。次に、武器に Reloadable1,shootable1,Reloadable2,shootable2,.. コンポーネントを使用できます。したがって、何かを変更したい場合は、1 つのコンポーネント (Reloadable2 など) を 1 つだけ変更する必要があります。

于 2016-08-01T10:08:25.400 に答える