变量永远不会赋值,并且始终具有默认值null

时间:2019-10-01 11:45:49

标签: c# unity3d

我试图通过使用Serializable Fields创建私有变量,然后在其下使用{get {return}}来访问我的元素,从而在Unity中引用我的元素。我是C#和Unity的一个完整的初学者,所以我希望得到一个简单的解释。这些可序列化字段中的每一个都有相同的错误,并且没有出现在我的Unity检查器中。

static void Main(string[] args)
{
    var values = new[] { 5, 7, 8, 9, 10, 10, 8, 2, 1 };

    var i = 0;

    foreach (var (x, y) in Pairwise(values))
    {
        if (x < y)
        {
            i++;
            if (i == 4)
                Console.WriteLine("Hello world!");
        }
    }

    Console.ReadLine();
}

3 个答案:

答案 0 :(得分:0)

您需要将结构标记为Serializable以便在Unity Inspector中显示它,如下所示:

[Serializable]
public struct UIElements
{
// ...
}

至于警告,这是正常现象,因此您可以忽略它。
只需确保在检查器中设置这些相应的值即可。

答案 1 :(得分:0)

您所有的字段似乎都定义为property。如果我错了,请有人纠正我,但是为了在检查器中显示属性,您必须“创建”自己的检查器,因为Unity不能安全地序列化/反序列化属性,因为getter和setter可能会根据封装的代码而产生不同的效果。 / p>

我希望这个post为您提供更多启示。

编辑

This也可能有用

答案 2 :(得分:-1)

Unity为MonoBehaviour的字段提供了serialization system,您可以使用它们在编辑器中设置字段链接,以后再通过代码使用它。

在这种情况下,您需要将UIElements作为继承自MonoBehaviour的类,将其附加到场景中的某些GameObject上并设置所需的链接-此后,您可以将链接用于场景中的对象。