【发布时间】:2023-02-08 15:36:32
【问题描述】:
假设我有两个实体,一个玩家和一个敌人。他们每个人都有自己的 C# 脚本。在 Enemy 上,它有这个基本的健康管理器代码:
[SerializeField] float health = 3;
public void TakeDamage(float damage)
{
health -= damage;
if (health <= 0) {
Destroy(gameObject);
// SOME EVENT HERE?
}
}
我想要的是让玩家知道他已经杀死了敌人(以及知道他摧毁了哪个敌人)。但是,我不确定该怎么做。我看过几种方法:
- 动作/委托;他们会要求玩家“导入”敌人的公共行动/委托(如果我理解正确的话;我还是 C# 的新手),我不希望这两件事之间存在依赖关系……他们re 在概念上无关;我不应该在播放器上从敌人“导入”。
- 使用 Unity 事件(如您在 UI 中配置的事件,例如按钮 OnClick());这也行不通,因为 Player 和 Enemy 都可能在运行时实例化,而不是预定义。
在我的脑海中,我想象 Player 脚本会像这样监听事件:
void OnEnemyDestroyed(GameObject enemy) { ...do things in reaction to enemy death here... }
这可能吗?
【问题讨论】: