c# - 如何为图形或树结构编写 GUI 编辑器

标签 c# unity3d

Unity3DMecanim 动画系统有一个自定义的 EditorWindow,允许通过 GUI 定义树(在本例中为混合树) .

看起来像:

enter image description here

它提供了创建节点(状态)和连接它们(转换)的可能性。

现在,我正在开发一些图形和树结构,我想编写一个编辑器扩展,以便我的游戏设计师能够填充这些结构。

我最想重新创建一个 EditorWindow,就像 Mecanim 动画师(上图)一样。

我的问题是:是否有任何可用组件可用于此类任务?是否有用于绘图和连接框和箭头的内置类?或者我需要自己完全编写 GUI 元素?

最佳答案

我不是要“寻找工具、图书馆或最喜欢的场外资源”。我想知道如何使用 Unity3D API 或引擎本身提供的一些可用组件来重现 Mecanim 之类的图形编辑器(如果问题不清楚,抱歉)。

这是我的答案:

不,没有可用于绘制那种图形的可用组件,但编写自己的组件非常容易。这是一个使用可拖动 GUI.Window 的简单示例的片段代表节点和Handles.DrawBezier绘制边缘:

public class GraphEditorWindow : EditorWindow
{
    Rect windowRect = new Rect (100 + 100, 100, 100, 100);
    Rect windowRect2 = new Rect (100, 100, 100, 100);


    [MenuItem ("Window/Graph Editor Window")]
    static void Init () {
        EditorWindow.GetWindow (typeof (GraphEditorWindow));
    }

    private void OnGUI()
    {
        Handles.BeginGUI();
        Handles.DrawBezier(windowRect.center, windowRect2.center, new Vector2(windowRect.xMax + 50f,windowRect.center.y), new Vector2(windowRect2.xMin - 50f,windowRect2.center.y),Color.red,null,5f);
        Handles.EndGUI();

        BeginWindows();
        windowRect = GUI.Window (0, windowRect, WindowFunction, "Box1");
        windowRect2 = GUI.Window (1, windowRect2, WindowFunction, "Box2");

        EndWindows();

    }
    void WindowFunction (int windowID) 
    {
        GUI.DragWindow();
    }
}

关于c# - 如何为图形或树结构编写 GUI 编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17593101/

相关文章:

c# - Unity 可序列化类自定义检查器

c# - Swagger JSON 相对路径

c# - 如何使用 C# 在 ZedGraph x 轴上绘制系统时间?

c# - 重新排序 XML 节点

c# - 避免在 Unity 中与 self 发生冲突

android - 更新 Android SDK 包列表失败 - Unity 2019.2.10f1

c# - 如何从脚本更改着色器的 "BaseMap"属性? - 通用RP模板

c# - 使用 WiX 作为 Windows 服务安装 .NET Core 3.0 Worker 服务

c# - 如何使用 c# xelement 动态过滤?

c# - Unity A* 使用航路点的寻路