Version: 2018.4
支持 IMGUI
Scripted Importers

ViewData 持久性

使用 ViewData API 可在域重新加载后或 Editor 重新启动时保留特定于 UI 的状态数据。持久数据存储在每个 EditorWindow 上。每个 VisualElement 都有一个 persistenceKey,必须设置它才能启用 ViewData 持久性。

本主题举例说明如何为已实现的控件和新对象启用 ViewData 持久性。

已实现的控件的用法

如果一个元素已经支持持久性,请设置 persistenceKey 来告诉系统其需要保存数据。与其他视觉元素的键相比,persistenceKey 必须是唯一的。

与 VisualElement 对象继承结合使用

创建新的 VisualElement 时可使其支持持久数据。第一步是将持久数据封装在元素类中的一个或多个 Serializable 类中:

[Serializable]
public class ExtraData
{
    public int m_Value = 0;
}
public ExtraData m_ExtraData;

第二步是每当持久数据发生变化时调用 SavePersistentData() 方法。这样可确保正确保存数据:

public int value
{
    get { return m_Value; }
    set
    {
        // 执行操作
        SavePersistentData();
    }
}

最后一步是覆盖 OnPersistentDataReady()

// 一旦我们知道可以访问持久数据存储,我们就在此处
// 开始真正的初步工作。
protected override void OnPersistentDataReady()
{
    base.OnPersistentDataReady();

    //(可选)根据当前父项获取更具唯一性的键。
    //这包括我们自己的 `persistenceKey`。
    var key = GetFullHierarchicalPersistenceKey();

    //获取或创建新的 ExtraData 对象。
    m_ExtraData = GetOrCreatePersistentData<ExtraData>(m_ExtraData, key);
}

上面的示例还演示了如何生成和分配唯一键。一旦指定了键,GetOrCreatePersistentData() 就会返回具有持久性状态的对象,或者按原样返回。


  • 2018–11–02 页面已修订并只进行了有限的编辑审查
支持 IMGUI
Scripted Importers