在 Unity 中绘制自定义编辑器控件

问题描述

有时 Unity 项目的数据需要比普通检查器字段更多的数据,我们希望创建更复杂的工具来编辑数据。例如,这里有一篇关于创建节点编辑器的博客文章Creating a Node Based Editor in Unity

能够创建节点编辑器很有用,但是该项目使用 GUI 和 Handles 中的工具仅绘制框、线和曲线,这对它本身来说很好,但是如果我们需要绘制未提供的东西怎么办通过手柄?

例如,如果我们想绘制一个精细的网格来表示我们希望能够编辑的一些数据,使用 Handles.DrawAAConvexpolygon(...) 渲染网格的每个单独的多边形似乎并不理想。难道我们不应该有办法更直接地发送要渲染的网格吗?或者 DrawAAConvexpolygon 正是我们应该做的?

当想要在编辑器控件中绘制任意网格时,GL 类是否是合适的方法?它当然可以画画,但这是不好的做法吗?特别是,GL.Viewport(Rect) 方法在 GUI 中的工作方式似乎非常奇怪。不能简单地给它一个 GUI Rect,从而在同一个地方有一个视口,如果我们给它相同的 Rect,我们会有一个 GUI 控件。我们需要计算将视口放置在适当位置的 Rect,即使这样我们也必须确定视口内的坐标系。根据 Viewport(Rect) 的文档,人们可能期望视口为 (0,0) 到 (Screen.width,Screen.height),但它并不总是完全按照这种方式工作,并且这一切给人的印象是GL 不是为在编辑器 GUI 中使用而设计的。 GL.Viewport 的文档在 OnPostRender 方法中使用了它,那么尝试在其他地方使用 GL 是否会被误导?

如果我们不应该使用 GL 类,那么在自定义编辑器控件中绘制的技术是什么?

解决方法

如果您想在 Unity 中制作基于节点的编辑器,您可能需要查看 Unity Graph 视图。 它使用接近 HTML 和 CSS 的 UXML 和 USS。 使您可以根据需要轻松自定义。

UXML 和 USS 上的 Unity 视频:使用 UIElements 自定义 Unity 编辑器!

https://www.youtube.com/watch?v=CZ39btQ0XlE&t=98s

这里有 3 个 Github,您可以下载并查看。

https://github.com/rygo6/GTLogicGraph enter image description here

https://github.com/rygo6/GraphViewExample

这是我做的。

https://github.com/KasperGameDev/Dialogue-Editor-Tutorial/tree/Dialogue-Prototype-Bonus enter image description here