小编Aza*_*ias的帖子

为什么在非MonoBehaviour序列化类中进行多个构造函数调用?

我已经将一个脚本附加到Unity游戏对象.该脚本包含各种公共属性,包括我自己的一些类.如下面的简化代码所示,其中TestMonoBehaviorClass附加到游戏对象并且TestClass' TestString在检查器中显示.

public class TestMonoBehaviorClass : MonoBehaviour
{
    public TestClass Test;
}

[System.Serializable]
public class TestClass
{
    public string TestString;
    public TestClass ()
    {
        Debug.Log ("TestClass creator called.");
        this.TestString = "Reset String";
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将脚本附加到游戏对象时,我希望调用一次TestClass(编辑:不是从MonoBehavior派生的构造函数)的构造函数.但如果我在Unity编辑器中运行程序然后停止程序,则会调用它四次.如果我将脚本附加到两个游戏对象上,则会七次.至少我多次在控制台中看到Debug.Log的输出.

不过,如果我TestString在编辑器中更改属性的内容,我手动输入的内容不会被覆盖!

为什么构造函数经常调用?何时在Unity的执行顺序中调用(Unity的事件函数执行顺序)?我可以忽略调用,还是必须在构造函数中添加特殊处理?到目前为止,我没有看到任何实际问题或副作用.

编辑:似乎只调用没有参数的构造函数.如果我只有带参数的构造函数,则不调用任何构造函数.

c# constructor execution unity-game-engine inspector

3
推荐指数
1
解决办法
738
查看次数