Unity中的c#事件

本文关键字:事件 中的 Unity | 更新日期: 2023-09-27 18:09:55

我有两个脚本附加到两个不同的游戏对象,其中一个我有这样的Action:

public class EnemeyController : MonoBehavior
{
    internal Action EnemyWaveKilled;
    private void OnTriggerEnter2D(Collider2D other)
    {
        // If hit by a bullet, kill and raise the event
        EnemyWaveKilled?.Invoke();
    }
}

在我的其他脚本的Start方法中,我尝试以这种方式订阅此事件:

public class GameController : MonoBehavior
{
    internal int PlayerLevel;
    private void Start()
    {
        _enemyController = GameObject.FindWithTag("Enemy").GetComponent<EnemyController>();
        _enemyController.EnemyWaveKilled += () => PlayerLevel++;
    }
}

我在场景中有3个游戏对象都带有标签Enemy

现在,我的GameController似乎以某种方式随机订阅了该事件。

更准确地说,如果我在EnemyController类的Update()方法中打印EnemyWaveKilled.Target,它会显示一行表示它是GameController,两行表示它是null)

任何帮助都非常感谢

Unity中的c#事件

我想我知道是怎么回事了。我有3个相同标签的对象,但我只订阅其中一个;这就是为什么我看到两个null值(和一个非null值)