c# - 如何找到从第三类继承的非单开发类的类

标签 c# unity3d

我正在开发一款 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/

相关文章:

c# - 如何统一创建可横向滚动的二维地形?

android - 如何检查用户是否已授予相机或位置权限(android)UNITY

c# - 如何检测相机 FOV 内的所有游戏对象? Unity3D

c# - 未附加本地数据库文件

c# - 是否可以在没有 PS4 套件的情况下访问 DualShock 4 Controller 中的扬声器?

c# - 在几秒钟之间限制按钮按下?

unity3d - #pragma vertex vert_img 在 Unity 着色器中有什么作用?

c# - 命名空间 c# 中的方法

c# - Visual Studio SQL 数据库,执行批处理时出错(消息 1785)

c# - AppFabric 缓存突然过期