使用 UIElements/UI Builder 绘制默认检查器

Cod*_*rer 5 c# unity-game-engine

我有一个LevelEditor脚本,其中有一个使用 UIBuilder 和 UIElements 构建的自定义检查器编辑器。问题是我想在列表中缓存引用,但我不想为它创建一个自定义列表视图(在 UIElements 中实现有点困难,不值得花时间),所以我想我只会制作private List<MyType> _myVar;as[Serializefield]和然后在自定义的下方绘制DefaultInspector 。

我找到了一个执行此DrawDefaultInspector 的方法,但不幸的是它什么也没做。

public override VisualElement CreateInspectorGUI()
{
    _visualTree.CloneTree(_rootElement);

    // My custom editor code
    ...

    DrawDefaultInspector();

    return _rootElement;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏...

Men*_*yus 5

您需要放置一个IMGUIContainervia UIBuilder(或通过代码 via _rootElement.Add(IMGUIVisualElement)),然后在内部执行以下操作CreateInspectorGUI

public override VisualElement CreateInspectorGUI()
{
    _visualTree.CloneTree(_rootElement);

    // Your custom editor code
    ...

    // Drawing the default inspector
    var defaultInspector = _rootElement.Q<IMGUIContainer>();
    defaultInspector.onGUIHandler = () => DrawDefaultInspector();

    return _rootElement;
}
Run Code Online (Sandbox Code Playgroud)

我通常做的是将其DefaultInspector也放在折叠中,以便设计人员可以使用自定义检查器,但每当他们需要一些对他们不可见的高级内容时,他们可以使用默认检查器。

所以他们会看到这样的布局(默认检查器默认是隐藏的:)) 在此输入图像描述