我正在使用Unity 2020.3.17f1,我正在开发一个任务系统。我希望任何脚本都能够触发一个事件,任务系统将监听并据此转发任务进度。
我目前正在使用 System.Action 尝试实现此目的,但我需要传递参数。例如,当我触发事件 OnEnemyKill 时,我希望侦听器能够知道哪个敌人被杀死。
这是我到目前为止所设置的:
QuestActions.cs
using System;
public class QuestActions
{
public static Action<string> OnEnemyKilled;
}
空格键Presser.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpacebarPresser : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
QuestActions.OnEnemyKilled("hello");
}
}
}
QuestTracker.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class QuestTracker : MonoBehaviour
{
private void OnEnable()
{
QuestActions.OnEnemyKilled += EnemyKilled;
}
private void OnDisable()
{
QuestActions.OnEnemyKilled -= EnemyKilled;
}
private void EnemyKilled(string msg)
{
Debug.Log("Message");
}
}
我的代码的问题是,在 QuestTracker.cs 中,我无法弄清楚如何获取在调用 SpacebarPresser.cs 中的操作时使用的参数。
我尝试过使用其他事件设置,但在使用委托和事件以及可编写脚本的对象事件时遇到了同样的问题。
调用
OnEnemyKilled
时作为参数传递的值应该作为 msg
中的 EnemyKilled
参数传递。