首页 > 解决方案 > 添加函数作为对象的属性

问题描述

在我的项目中,我正在实现一个动作类,并且想知道是否可以将函数作为参数传递,如下所示:

public class Action : MonoBehavior {
  public int ID;
  public string Name;
  //Test variable to store a function here
}

稍后我会创建一个函数,例如这个函数,然后调用它。

void TestFunction() {
  print("Test");
}
public Action ExampleAction;
ExampleAction.Test = TestFunction();

最后我可以简单地调用“Action.Test”来运行TestFunction。

我已经对该主题进行了一些研究,并且我相信它与授权有关,但是在这种情况下我该怎么做呢?

更重要的是,这种实现是可靠的还是最好的方法?在我的项目中,我计划有很多可切换的动作,当点击它们时,会不断地做各种各样不同的事情。

标签: c#unity3d

解决方案


据我了解,您要做的是创建一个参数化委托。

我认为UnityAction非常适合这个。 UnityAction是一个内置委托,不带参数也不返回值。

在您的情况下,您可能希望使用参数化UnityAction<T1, T2>,您将在其中设置T1为 int 和T2字符串。

这是演示的片段:

using UnityEngine;
using UnityEngine.Events;

public class UnityActionDemo
{
    UnityAction<int, string> action;
    private void Start()
    {
        action = TestMethod;
    }

    public void TestMethod(int id, string name)
    {
        Debug.Log("id is: " + id + "\t name is: " + name);
    }
}

action然后可以传递给任何以 aUnityAction<int, string>作为参数的方法。

为了调用该方法,请action.Invoke使用您要使用的参数进行调用:

action.Invoke(27, "A cool method name");

:)


推荐阅读