如何从Unity中的函数返回多个值?

时间:2018-11-29 17:49:25

标签: c# unity3d

我知道这是一个曾经被问过的重复问题,但是我发现的所有问题一般都是针对C#的,但是我不支持Unity,而我认为Unity最多支持.NET 4.6而不是最新的框架?

如果某几个类别的布尔值均为true,则我有一个传递多个变量的函数。

void CheckData()
{
    if (int 1 > int 2)
    {
        otherScript.Function(var 1, var 2, var 3)
    }
}

该函数查询SQL数据库并根据SQL数据定义输入的变量。有没有简单的方法可以返回多个变量的值?从我一直在进行的研究来看,似乎可以在较新版本的.NET中执行此操作,但是不支持Unity,因为它不支持元组?

我还读过一些人说可以返回一个数组,然后对函数外部的数据进行排序,但是后来我读过其他人说相反的话,发现的信息不一致。

有人可以让我知道实现这一目标的最简单方法吗?如果需要的话,我将对每个变量进行硬编码并手动进行,但是我试图保持代码整洁,因此,如果有更好的方法,我想在花费数小时进行不正确的编码之前想知道。 / p>

编辑:建议的重复文章链接显示了如何通过制作另一个类来实现此目的,但是我正在寻找一个更简单的解决方案,下面对此进行了解答。谢谢。

3 个答案:

答案 0 :(得分:5)

解决方案仍然是元组。

  

但不支持Unity,因为它不支持元组?

Unity现在支持元组,您需要Unity 2017或更高版本才能使用它。转到编辑-> 项目设置->播放器-> 其他设置-> 配置- -> 脚本运行时版本-> .NET 4.x等效

重新启动Unity和Visual Studio,Tuple应该对您可用。


如果您仍在使用低于2017的Unity版本,则应使用out参数甚至使用List来填充参数中的数据。

答案 1 :(得分:2)

您必须在c#中使用 out 关键字。这是专门为这种情况设计的

out parameter modifier (C# Reference)

这是一个简单的示例:

_data

答案 2 :(得分:1)

如果tupleout对您不起作用(我认为两者都是更好的选择),那么包装器类又如何呢?注意:tuple 实际上是什么,除了它们是泛型类型之外,不是。

public class Wrapper {
    var a, b, c;
}
public Function(var a, var b, var c ):Wrapper
{
    Wrapper outobj = new Wrapper();
    outobj.a = 1;
    outobj.b = 2;
    outobj.c = 4;
    return outobj;
}