【问题标题】:How to return multiple values from function in Unity?如何从 Unity 中的函数返回多个值?
【发布时间】:2018-12-18 02:48:24
【问题描述】:

我知道这是一个以前被问过的重复问题,但我发现的所有问题通常都涉及 C#,而不是 Unity,我认为 Unity 支持最高 .NET 4.6 而不是最新的框架?

我有一个函数可以传递多个变量,如果 bool 对于多个类别中的每一个都是 true。

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

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

我也读过有人说你可以返回一个数组,然后在函数之外对数据进行排序,但后来我读到其他人说相反,我发现的信息不一致。

谁能告诉我实现这一目标的最简单方法?如果需要,我只会对每个单独的变量进行硬编码并手动完成,但我正在努力保持我的代码干净,所以如果有更好的方法来做到这一点,我想在我花费数小时不正确地编码之前知道。

编辑:建议的重复帖子链接显示了如何通过创建另一个类来完成此操作,但我正在寻找一个更简单的解决方案,该解决方案在下面得到了回答。谢谢。

【问题讨论】:

标签: c# unity3d


【解决方案1】:

解决方案仍然是元组。

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

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

重新启动 Unity 和 Visual Studio,您应该可以使用 Tuple


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

【讨论】:

    【解决方案2】:

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

    out parameter modifier (C# Reference)

    这是一个简单的例子:

    void CheckData()
    {
        if (int 1 > int 2)
        {
            int a;
            int b;
            int b;
            otherScript.Function( out a, out b, out c)
        }
     }
    
     public class OtherScript
     {
        public Function( out int a, out int b, out in c )
        {
            a = 1;
            b = 2;
            c = 4;
        }
     }
    

    【讨论】:

    • 您也可以使用 ref 键通过引用传递值,但您必须在将其传递给函数之前对其进行初始化,这里有一些不错的答案:stackoverflow.com/questions/388464/…
    • 顺便说一下,在你的 void CheckData() 中你输入了两次 b,我猜你希望最后一个是 c 对吧?
    • 这正是我想要的,谢谢。实际上,我确实按照@Felipe Gutierrez 的建议使用了 ref,但是 out 和 ref 是我需要学习的方法。你为我节省了很多时间,我很感激。
    • 欢迎您!但请注意,ref 和 out 的目的不同。 ref 旨在传递引用(避免复制)和 out 旨在取回值
    【解决方案3】:

    如果tuples 和out 不适合你(我认为这两个都是更好的选择),那么包装类怎么样?注意:这实际上是 tuples 的,除了它们是泛型类型而这不是。

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      相关资源
      最近更新 更多