以相同的方式处理多个组件

时间:2017-10-26 16:49:22

标签: c# unity3d

我在Unity中有一个类,它可以有多种类型的组件。我想以预定义的方式处理这些组件 - >转换为:我有一个方法体,我不想为不同的组件改变。

但是由于接口不能有方法体,我不能在同一个类中使用多个接口,但是根据它们的组件不同。

我知道我在C#中有效地讨论了多重继承,但有没有办法在Unity引擎中实现这样的概念?

我想要这样的东西

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

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

    }
}

但不是Process有一个可以在实现中改变的主体。我希望这种行为保持不变。

1 个答案:

答案 0 :(得分: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);
        }
    }
}

如果你展示你想做什么,我可以编辑我的答案。