我创建了一个带有一系列按钮的自定义窗口。选择游戏对象并按下按钮后,所选游戏对象的MyScript组件的myPrefab值将设置为特定预制(根据按下的按钮)。
这一直在努力,直到我按下播放。我可能有10个带有MyScript组件的游戏对象,并使用按钮设置每个对象包含一个特定的预制件。在检查器中,我可以看到每个游戏对象的预制值已更新。
但是,只要按下播放按钮,按钮所做的任何修改都会撤消。
为了澄清,如果我在检查器中设置预制件,然后使用按钮,它将恢复为检查器中设置的预制件。如果我只是由检查员设置它,它将不会还原。如果它默认为null,并且仅由按钮设置,则它将恢复为null。 (仅恢复按钮结果)。
有人可以解决为什么会这样吗?是否有某种确认或保存方法我应该打电话来“锁定”我的选择?
答案 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);
}
}