我正在开发一款 2D RPG,我有一个适用于游戏中所有敌人的类“BaseEnemy”。它包含他们的统计定义、所有敌人共享的基本函数等。每个敌人都有自己的脚本,然后继承 BaseEnemy 类并使用 BaseEnemy 构造函数设置它的统计数据,就像这样。
public class LesserSlime : MonoBehaviour {
public BaseEnemy myEnemy = new BaseEnemy(1, 5, 5, 5, 5, 5, 5, 5);
public EnemyHealthBar myHealthBar;
// Use this for initialization
void Start () {
myEnemy.IsSelected = false;
}
我的问题是我正在尝试制作一个通用的战斗 Controller 来处理回合,并确定选择了哪个敌人,在战斗开始时初始化时会在开始时生成所有标记为“敌人”的游戏对象数组:
public class BattleController : MonoBehaviour {
public GameObject[] Enemies;
我的问题是从那里我不知道如何访问每个单独敌人的“BaseEnemy”,因为他们可能有不同的敌人脚本(一个可能是史莱姆,一个可能是仙女,等等)但都调用自己的 BaseEnemy 类实例。无论如何我可以从 BattleController 类找到访问它们的方法,还是我应该以不同的方式进行此操作?
最佳答案
选项#1
你做一个界面如
public interface IEnemy {
BaseEnemy GetBase();
}
然后让敌人类继承它
public class Slime : MonoBehaviour, IEnemy
然后你可以像这样从战斗 Controller 访问它
Enemies[x].GetComponent<IEnemy>().GetBase();
选项 #2
你可以让 BaseEnemy 继承 Monobehaviour
pubilc class BaseEnemy : MonoBehaviour
然后敌人只继承 BaseEnemy
public class Slime : BaseEnemy
然后像这样访问它
Enemies[x].GetComponent<BaseEnemy>()
选项 #3
你创建一个 BaseUnityEnemy 类
public class BaseUnityEnemy : MonoBehaviour {
public BaseEnemy myEnemy;
public EnemyHealthBar myHealthBar;
}
然后让你所有的敌人继承它
public class LesserSlime : BaseUnityEnemy {
// Use this for initialization
void Start () {
myEnemy = new BaseEnemy(1, 5, 5, 5, 5, 5, 5, 5);
myEnemy.IsSelected = false;
}
}
你可以像这样访问它
Enemies[x].GetComponent<BaseUnityEnemy>().myEnemy
关于c# - 如何找到从第三类继承的非单开发类的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098790/