无法更改附加到游戏对象的脚本上的公共变量。游戏时会恢复值

时间:2012-04-19 10:19:54

标签: c# unity3d gameobject

这是我的第一个问题。无法找到有关该主题的任何内容。

我想创建一个编辑器脚本,用于更改附加到GameObject的脚本中的大量公共bool。

我将此脚本附加到GameObject。 GameObject是一个预制件:

using UnityEngine;
using System.Collections;

public class ScriptWithPublicBools : MonoBehaviour {

    public bool b1;
    public bool b2;
}

这是我的编辑脚本:

using UnityEngine;
using System.Collections;
using UnityEditor;

public class EditorHelper : ScriptableObject
{
    [MenuItem("Trace/Trace")]
    public static void trace()
    {
        foreach (GameObject g in Selection.gameObjects)
        {
            ScriptWithPublicBools tb = g.GetComponent<ScriptWithPublicBools>();

            if (tb)
            {
                tb.b1 = false;
                tb.b2 = true;
            }
        }
    }
}

脚本工作正常,并且在编辑器中正确设置了游戏对象上的bool。但是当我按下PLAY按钮时,两个bool的值会切换回应用脚本之前的值。

预制件的值是什么并不重要,在应用编辑器脚本之前,这些值只是恢复到值。

我做错了什么还是错误?

如果我应用编辑器脚本,将场景保存为新场景,并打开新创建的场景,值也是错误的。

但是,如果GameObject不是预制件,则一切都能正常工作,即使在启动播放模式后,值也会保留编辑器脚本给出的值。

因此,只有在使用预制件时才会出现问题。

1 个答案:

答案 0 :(得分:4)

完成所有更改后,您需要致电EditorUtility.SetDirty (tb);,有关详细信息,请参阅EditorUtility.SetDirty

如果您需要更改预制件本身,请查看PrefabUtility