Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
C#的问题
czt5yue11发起了问答10-20
0
回复
69
浏览

我有一个需求,创建战士,法师角色。战士是近身攻击,法师是远程攻击。如果我创建一个英雄基类,然后创建战士类继承英雄类,实现近身攻击,创建法师类,实现远程攻击。但是后面我想创建更多的角色,如弓箭手(远程),此时我应该按照法师类差不多设计弓箭手类,实现远程攻击。但是如果更多的英雄,就要创建更多的类继承英雄类,是吗?英雄只有远程和近身,如果下一个英雄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字段中。
请问老师我的思路对吗?我应该怎么去修改呢

发表回复
你还没有登录,请先 登录或 注册!