我有一个需求,创建战士,法师角色。战士是近身攻击,法师是远程攻击。如果我创建一个英雄基类,然后创建战士类继承英雄类,实现近身攻击,创建法师类,实现远程攻击。但是后面我想创建更多的角色,如弓箭手(远程),此时我应该按照法师类差不多设计弓箭手类,实现远程攻击。但是如果更多的英雄,就要创建更多的类继承英雄类,是吗?英雄只有远程和近身,如果下一个英雄C的攻击方式是近身,那么战士的近身,和C的攻击方式是一样的,那么按道理来说近身代码可以重用的。然后如果改变方式,设计一个角色类,英雄基类继承角色类,敌人基类继承角色类。因为敌人也有近身和远程的方式的。
我想用组合+接口的方式实现英雄和敌人的行为可以灵活定制
攻击行为接口
public interface IAttackBehaviour{
void PerformAttack(GameObject target);
}
远程攻击继承攻击行为
public class RangeAttack:MonoBehaviour,IAttackBehaviour{
public void PerformAttack(GameObject target){
Debug.Log("我是远程攻击");
}
}
近战攻击继承攻击行为
public class MeleeAttack:MonoBehaviour,IAttackBehaviour{
public void PerformAttack(GameObject target){
Debug.Log("我是近战攻击");
}
}
英雄类
,我希望在英雄类中,创建一个public 的攻击行为接口字段,我以为将继承接口的两个攻击方式类继承MonoBehaviour,就能拖进去attackBehaviour字段赋值来决定这个Hero类攻击方式。但是attackBehaviour没有任何拖拽提示的地方。
public class Hero:MonoBehaviour{
public IAttackBehaviour attackBehaviour;
void Update(){
if(Input.GetMouseButtonDown(0)){
attackBehaviour.PerformAttack();
}
}
}
我的本来想法是,将攻击方式做成预制体,挂载远程,或者近身脚本,英雄GameObject1挂上英雄类Hero,然后在Hero类中拖拽进去attackBehaviour字段中。
请问老师我的思路对吗?我应该怎么去修改呢