我在Unity中有一个类,它可以有多种类型的组件。我想以预定义的方式处理这些组件 - >转换为:我有一个方法体,我不想为不同的组件改变。
但是由于接口不能有方法体,我不能在同一个类中使用多个接口,但是根据它们的组件不同。
我知道我在C#中有效地讨论了多重继承,但有没有办法在Unity引擎中实现这样的概念?
我想要这样的东西
public interface IProcessableComponent<T> where T : Component
{
void Process();
}
public class ProcessableComponentsBase : IProcessableComponent<Rigidbody>, IProcessableComponent<Collider2D>
{
public void Process()
{
}
}
但不是Process有一个可以在实现中改变的主体。我希望这种行为保持不变。
答案 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);
}
}
}
如果你展示你想做什么,我可以编辑我的答案。