5

这是我的第一个问题。一直没能找到关于这个话题的任何东西。

我想创建一个编辑器脚本来更改附加到游戏对象的脚本中的许多公共布尔值。

我将此脚本附加到游戏对象。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;
            }
        }
    }
}

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

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

我做错了什么还是一个错误?

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

但是,如果 GameObject 不是预制件,一切都可以完美运行,并且即使在启动播放模式之后,这些值也会保持编辑器脚本给出的值。

所以问题只存在于使用预制件时。

4

1 回答 1

4

您需要EditorUtility.SetDirty (tb);在所有更改完成后调用,有关此的更多信息,请参阅EditorUtility.SetDirty

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

于 2012-04-21T08:23:53.723 回答