【问题标题】:Unity3d perform a callback from multiple scriptsUnity3d 从多个脚本执行回调
【发布时间】:2016-07-14 08:46:30
【问题描述】:

我在 Unity 的 C# 脚本中遇到回调函数问题。

在 Corona SDK 中,如果您想执行回调,只需将其作为参数传递,然后在适当的位置调用即可。

local function boom()
    print("booom!!!")
end

local function bang()
    print("baaaang!!!")
end

local function selector(var, func1, func2)
    if var > 0 then
        func1()
    else
        func2()
    end
end

selector(5, boom, bang)
selector(-12, boom, bang)

我得到:

booom!!!
baaaang!!!

哪个是正确的。

但是当我尝试在 Unity 的 C# 脚本中实现它时,我遇到了很多问题。首先,仅传递一个参数是不够的。您需要在selector() 函数中指定变量的类型。所以我必须为func1func2 指定类名。但是,如果我希望能够从多个脚本中调用它并传递不同的回调函数呢?然后我无法将类指定为类型。

我找到了一些教程,但没有一个能解决我的问题。它们都描述了如何在一个类中或仅从一个预定义的类中执行此操作

【问题讨论】:

    标签: c# unity3d lua callback coronasdk


    【解决方案1】:

    实际上它在 C# 中的工作方式非常相似,除了您必须明确说明类型:

    void boom()
    {
        Debug.Log("booom");
    }
    
    void bang()
    {
        Debug.Log("baaaang");
    }
    
    void selector(int v, Action func1, Action func2)
    {
        if (v > 0)
            func1();
        else
            func2();
    }
    
    ...
    
    selector(5, boom, bang);
    selector(-12, boom, bang);
    

    【讨论】:

    • 有效!真的行!所以“行动”就是:D
    • 顺便说一句。如何将Action func2 设置为可选? Action? func2 = null 不起作用。
    • 为什么不起作用?给出错误消息或解释您判断为无功能的行为通常会有所帮助。我想您在尝试调用 func2() 时会收到 NullReferenceException。这是意料之中的,因为您不能调用 null。在调用它之前检查它是否为空,如果不是,则只调用它。
    • 对。我想这对你来说可能很明显。我收到错误消息:“类型 'System.Action' 必须是不可为空的值类型才能将其用作泛型类型或方法 'System.Nullable' 中的类型参数 'T'”。而且我在函数的第一行有if (func2 != null) {func2 (); };,所以我不会调用null。
    • 哦,当然。 Action 已经可以为空,因为它是一个引用类型。因此,您无需通过附加? 使其可为空。只需说 Action func2 = null 即可选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2010-09-16
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多