首页 > 解决方案 > Unity的c#启动静态变量失败

问题描述

我试图在Unity 2017中制作单例。

public class Singleton {

    public static readonly Singleton instance = new Singleton();

    static readonly float FLOAT_VAL = 3.5f;
    static readonly int INT_VAL = 3;

    private Singleton() {
        Debug.Log("FLOAT_VAL = " + FLOAT_VAL);
        Debug.Log("INT_VAL = " + INT_VAL);
    }
}

我希望看到"FLOAT_VAL = 3.5""INT_VAL = 3"的输出。但是,它的输出为"FLOAT_VAL = 0""INT_VAL = 0"。然后我删除了两个“只读”修饰符,留下“静态”,仍然得到两个零。

这个单例的初始化或构造发生了什么?如何正确地将值赋予静态变量?与Unity有什么关系吗?(我在构建项目的时候选择了il2cpp,但是这个是在Editor Mode下测试的)

顺便说一句,我发现变量“instance”的初始化直到第一次调用才开始(我曾经认为所有静态变量都会在加载程序集时初始化。)。它也是 Unity 的另一个功能还是只是正常的?

标签: c#unity3dstatic

解决方案


这些字段按照它们被声明的顺序被初始化......所以因为你的实例首先出现,所以你的其他值为零。如果您将它们移到您的实例上方,它们将具有您期望的值


推荐阅读