如何使用继承做一个简单的效果系统?



我正在尝试练习继承,只是在一般的脚本相互作用,我认为做一个简单的效果系统可能很有趣,但我有点卡住在如何构建的东西。

我一直想这样做

public abstract class BaseEffect : ScriptableObject
{
//not sure if this is a good use of enum
public enum EffectType 
{
harm, //can be applied to enemies
help, //can be applied to allies
self //can be applied to yourself
}
public string name;
public string description;
public float duration;
public bool canStack; //can the effect be applied multiple times
public EffectType type;
//I'd probably also write my apply and remove effect methods here
}

然后是一堆像这样的派生类

public class TestEffect : BaseEffect
{
//maybe include some variables specific to this effect  
//when the effect gets applied have this run every frame to od whatever the effect does
public void DoEffect()
{
}
}

我有一种感觉,虽然这不是一个很好的方式去做这件事,或者至少我写的方式不是很好,所以寻找一些建议来走上正确的轨道

这种安排可能受益于抽象方法或使用抽象类所使用的接口来强制派生类响应事件。说到事件,您还可以通过事件将派生调用连接起来。简单地说,就是在基类中引入一个抽象方法,这个方法必须在派生类中实现。然后在基类"管道"中调用该方法。当一切特别的事情都准备好了。

public abstract class BaseEffect : ScriptableObject
{
protected abstract void DoEffect();

private SomeMethod()
{
if(canDoEffect)
DoEffect();
}
}

最新更新