【发布时间】:2018-09-04 03:29:53
【问题描述】:
所以我已经看到了其中一些统一的脚本,我想知道如何在我自己的脚本中重新创建它?
所以我有一个脚本,当单击对象时,它将调用另一个脚本上的函数。我希望能够传递参数等等,但是 Inspector 被一堆切换、int 字段等弄得一团糟。
有什么办法可以重现这种东西吗?
与其说是事件类型,不如说是小功能框。如果这是有道理的:)
谢谢!
【问题讨论】:
所以我已经看到了其中一些统一的脚本,我想知道如何在我自己的脚本中重新创建它?
所以我有一个脚本,当单击对象时,它将调用另一个脚本上的函数。我希望能够传递参数等等,但是 Inspector 被一堆切换、int 字段等弄得一团糟。
有什么办法可以重现这种东西吗?
与其说是事件类型,不如说是小功能框。如果这是有道理的:)
谢谢!
【问题讨论】:
您在该屏幕截图中显示的框是Event Trigger。据我所知,没有任何方法可以让您将 UI 对象与此基础类型分开。所以没有办法只绘制委托框。但是,您可以基于EventTrigger 创建一个类,然后您可以扩展EventSystemEditor。
您还可以创建一个派生自 UnityEvent in this fashion 的类,它会以您想要的方式显示一个函数委托框。
但是,同样,这不会为您提供为您绘制函数/委托框的绘图方法。我不知道让 Unity3D 让你这样做的单一方法。
您可以查看完整的 GUI 绘图方法列表:
https://docs.unity3d.com/ScriptReference/EditorGUILayout.html
https://docs.unity3d.com/ScriptReference/EditorGUI.html
但它只是不存在。
我知道有些人已经设法通过 Inspector 魔法实现了类似的效果,重新创建了类似的方面和功能。我知道FullInspector 可以在其检查器中进行委托,您可以检查其源代码以了解如何操作,但最终可能需要大量工作。专门序列化委托是地狱般的,所以如果你想让它序列化,我什至不会打扰。我建议找到一条不同的阻力最小的路径。
这里有一个替代方案:
您可以通过反射收集目标类中的方法,并将它们显示在下拉菜单中。然后,一旦选择了一个方法,您就可以再次使用反射来查看该方法需要哪些参数,并使用 GUI 函数绘制从用户输入接收这些参数所需的适当字段。
这绝对是可能的,但同样,我认为这需要相当多的时间来详细说明,而且您最好找到一种方法来满足您的要求,而无需这种级别的编辑器 GUI 恶作剧。
【讨论】: