2017-10-26 13 views
0

私はUnityに複数のタイプのコンポーネントを持つことができるクラスを持っています。そして、私はあらかじめ定義された方法でそれらのコンポーネントを処理したいと思っています。これは次のように解釈されます:私は異なるコンポーネントに対して変更したくないメソッド本体を念頭に置いています。同じ方法で複数のコンポーネントを処理する

インターフェイスはメソッド本体を持つことはできませんので、同じクラスで複数のインターフェイスを使用することはできませんが、コンポーネントはそれぞれ異なる方法で動作します。

私はC#で複数の継承について効果的に話していますが、ユニティエンジンでこのような概念を実装する方法はありますか?

私はこの

public interface IProcessableComponent<T> where T : Component 
{ 
    void Process(); 
} 

public class ProcessableComponentsBase : IProcessableComponent<Rigidbody>, IProcessableComponent<Collider2D> 
{ 
    public void Process() 
    { 

    } 
} 

しかし、その代わりの実施に変更することができます体を有するプロセスのような何かをしたいです。私はその行動を変わらないままにしておきたい。

+0

いくつかのコードを表示できますか?私はあなたが望むものを明確に理解していません。 –

+0

おそらくジェネリックを使いたいのですか?しかし、あなたの意図をより明確にするためにはっきりとしたコードが必要です – UnholySheep

+0

投稿をスニペットで更新してみましょう – Jajan

答えて

1

私が正しく理解していれば、あなたはこのような何か必要があります:あなたはあなたが何をしたいのかを示している場合、私は私の答えを編集することができ

public interface IProcessableComponent 
{ 
    void Process(Vector3 position); 
} 

public abstract class ProcessableComponentBase : MonoBehaviour, IProcessableComponent 
{ 
    [SerializeField] 
    private Vector3 holdedVector; 
    public Vector3 HoldedVector { get { return holdedVector; } protected set { holdedVector = value; } } 
    public virtual void Process(Vector3 newVector) 
    { 
     HoldedVector = newVector; 
    } 
} 

public class ComponentA : ProcessableComponentBase 
{ 
} 

public class ComponentB : ProcessableComponentBase 
{ 
} 

public class TestComponentProcessing : MonoBehaviour 
{ 
    private void Awake() 
    { 
     var components = GetComponents<IProcessableComponent>(); 

     foreach(var entry in components) 
     { 
      entry.Process(Vector3.zero); 
     } 
    } 
} 

を。

関連する問題