从自定义EditorWindow修改GameObject组件值

时间:2014-03-25 14:44:54

标签: c# unity3d

我创建了一个带有一系列按钮的自定义窗口。选择游戏对象并按下按钮后,所选游戏对象的MyScript组件的myPrefab值将设置为特定预制(根据按下的按钮)。

这一直在努力,直到我按下播放。我可能有10个带有MyScript组件的游戏对象,并使用按钮设置每个对象包含一个特定的预制件。在检查器中,我可以看到每个游戏对象的预制值已更新。

但是,只要按下播放按钮,按钮所做的任何修改都会撤消。

为了澄清,如果我在检查器中设置预制件,然后使用按钮,它将恢复为检查器中设置的预制件。如果我只是由检查员设置它,它将不会还原。如果它默认为null,并且仅由按钮设置,则它将恢复为null。 (仅恢复按钮结果)。

有人可以解决为什么会这样吗?是否有某种确认或保存方法我应该打电话来“锁定”我的选择?

1 个答案:

答案 0 :(得分:1)

只需添加“EditorUtility.SetDirty(component);”修改后的值。 这标志着对象需要存储(而不仅仅是编辑器中显示的值)。

在检查器中,一旦更改,事物就会被标记为脏。但是,通过这样的其他编辑器更改它们意味着必须手动将对象标记为脏。

if (GUI.Button(rectangle, GUIContent.none))
{
    foreach (GameObject go in Selection.gameObjects)
    {
        MyScript component = go.GetComponent<MyScript>();


        if (component == null)
            continue;

        component.myPrefab = firstPrefab;
        EditorUtility.SetDirty(component);
    }
}