监听动作并传递参数

问题描述 投票:0回答:1

我正在使用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 中的操作时使用的参数。

我尝试过使用其他事件设置,但在使用委托和事件以及可编写脚本的对象事件时遇到了同样的问题。

c# unity-game-engine delegates action
1个回答
0
投票

调用

OnEnemyKilled
时作为参数传递的值应该作为
msg
中的
EnemyKilled
参数传递。

© www.soinside.com 2019 - 2024. All rights reserved.