问题标签 [unity-editor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
534 浏览

c# - Unity,同一类型的多个自定义编辑器

我正在 Unity 5.6 中制作基于插件的 C# 应用程序,其中有时可能会安装一些插件,有时可能不会。

在我的插件Plugin1中,我有一个组件Plugin1.Component1。在同一个项目中,我为它实现了一个自定义编辑器,Plugin1.Component1Editor称为[CustomEditor(typeof(Plugin1.Component1))]. Plugin1安装后,它Component1可用,并使用自定义编辑器呈现。

我的插件Plugin2依赖于Plugin1. 根据其组件中的设置Plugin2.Component2,它想更改Plugin1.Component1.

我在 中实现了一个新的自定义编辑器,Plugin2称为. 它继承自,而不是继承自,因为后者会导致在 中找不到序列化属性的问题。Plugin2.Component1Editor[CustomEditor(typeof(Plugin1.Component1))]UnityEditor.EditorPlugin1.Component1EditorPlugin1.Component1Editor

Plugin2.Component1Editor在编译时不会冲突Plugin1.Component1Editor,因为它有自己的命名空间。但是 Unity 检查器中实际发生了什么?

我测试它时的行为是所需的行为:Plugin2.Component1Editor呈现检查器,除非Plugin2未安装。但为什么?我不想相信它会继续这样做,除非我知道为什么。

谢谢!

编辑:我错了,它没有渲染Plugin2.Component1Editor,它是默认的 Unity 编辑器运行。我的自定义编辑器都没有使用。如何指定要使用哪一个?

0 投票
0 回答
511 浏览

unity3d - Unity3d 通过脚本设置播放器图标

我正在尝试通过脚本设置我的播放器图标,但是当我运行脚本时它什么也不做,而且我没有收到任何错误。这是我的代码:

有人可以帮我吗?我究竟做错了什么?

感谢

0 投票
1 回答
299 浏览

c# - 在 Unity / C# 中动态创建 CustomEditor 类

我正在尝试在我的 Unity 项目中实现编辑模式脚本。这个想法是可以将脚本附加到对象上,并且在对其进行编辑时,可以看到诸如比例/位置/旋转之类的属性正在更新。

无需编写编辑模式脚本,所有这些都是可能的,但在按下播放按钮之前,这些更改是不可见的。这就是这里的区别。

我正在使用此处提供的脚本的变体来执行此操作。

首先,我有一个 MonoBehavior 脚本附加到我的游戏对象 - 它看起来像这样:

updateEditorState其次,我在编辑器文件夹中有一个脚本,只要按下“更新”按钮,它就会调用此方法:

这很好用,我很感激,但最后一段代码是纯样板文件。对于我想要影响编辑模式的每个脚本,我需要一个几乎相同的文件。

所以我开始尝试制作一个“元”编辑器脚本。这个想法是这个脚本将有一组插槽,开发人员可以将脚本拖入其中。拖到这里的每个脚本都会得到一个自定义编辑器类,如上图所示。当然,被拖到这里的类每个都需要实现updateEditorState,但这是协议的唯一要求。

因此,如果我制作另一个如下所示的编辑器脚本:

然后我可以触发以下updateEditorState功能:

但正如你所见,我不知道如何动态生成类。

0 投票
1 回答
3559 浏览

unity3d - Unity 自定义编辑器窗口 - 多选下拉菜单

我目前正在使用 Unity3D(c#) 中的自定义编辑器窗口。目前我正在尝试添加一个允许多项选择的下拉列表。 下拉示例 这可行,但下拉列表仅限于 32 项。我知道这是因为二进制编码(32 位和所有),并且看不到解决此问题的直接方法。

你们中有人知道另一个允许相同类型的多选的下拉菜单吗?(还包括“Nothing & Everything”选项),或者对如何自己编写此下拉列表有任何想法?

提前致谢。

0 投票
2 回答
385 浏览

image - Unity 预制件的行为很奇怪?

我编写了一些代码,允许用户通过在流资产中加载输入图像然后使用这些图像创建对象来在编辑器模式下实例化对象。

这很好用,问题是当我尝试使用这些对象之一创建预制件时。由于某种原因,图像没有保存在预制件中,因此当我加载该预制件时,我得到的是白色图像,而不是原始游戏对象中的图像。

更新:事实证明,我的背景屏幕实际上工作正常,但其他游戏对象都没有。所以我不确定出了什么问题以及为什么它只适用于某些对象而不适用于其他对象。

这是我的代码:

0 投票
1 回答
1061 浏览

c# - Unity 可以在层次结构中添加游戏对象但不能实例化它?

我不确定是否可以在场景中创建一个游戏对象(因此它出现在层次结构中),但我希望 Unity 在我按下播放时不要实例化(或者更确切地说删除它)这样的游戏对象。

我想这样做的原因。我在我的游戏中将游戏对象创建为“敌人生成器”。但我不想在游戏运行时将这些变换或游戏对象实际存储在内存中。因此,我创建了一个编辑器脚本,用于搜索所有生成器实体,检索我需要的信息并使用它创建一个二进制文件,稍后敌人管理器会在初始化过程中在运行时读取该文件。

如果这是不可能的,你们对我如何实现类似的东西有什么建议吗?

提前谢谢了。

0 投票
1 回答
1362 浏览

c# - Unity Editor - 从 BinaryWriter 到 Object 或 TextAsset

有什么方法可以检索 BinaryWriter 创建的文件并将其转换为 TextAsset 或 Object?

我正在为我的项目创建一个自定义编辑器,它可以选择创建一个新的二进制文件: 在此处输入图像描述

“文件”字段供用户拖动现有文件,但用户可以按“创建新文件”按钮创建一个新文件,理想情况下,我希望新创建的文件自动放置在“文件”字段中.

编辑:尽可能避免将二进制文件保存到资源文件夹,然后加载它并将其转换为 TextAsset。

提前致谢!

0 投票
1 回答
1570 浏览

c# - Unity IMGUI - ArgumentException:在执行 MouseDown 时获取控件的位置 - OnGUI 事件

我一直在为 IMGUI(旧版和编辑器 GUI 系统)苦苦挣扎。问题是我无法理解这种即时方式和所有不同的事件。

我构建了一个简单的示例来演示我对这个系统的许多挫败感之一。

好的,所以,在这个非常简单的代码中,我有一个本机切换,根据它的状态显示或不显示标签。这完美地工作。

现在,我正在自己写一篇文章。

我的目标是手动重现切换的行为:我的可点击标签在活动时为粗体,在禁用时为正常。类似于原生切换的复选框图形。然后,如果我点击它的矩形,我会返回相反的状态。

在我看来,这应该是可行的。但是,我知道 OnGUI 函数会发生很多事情,比如事件Repaint,并且Layout布局需要在帧期间保持一致。这里的错误是

ArgumentException:在执行 MouseDown 时获取控件 1 在只有 1 个控件的组中的位置

但通常也会出现这样的错误

ArgumentException:GUILayout:不匹配的 LayoutGroup.MouseDown

我知道这些错误是在您更改 Layout 和 Repaint 之间的内容时发生的。但是我找不到我的简单控件的修复程序。所以这是我的问题。

使用与我的函数 Toggle 相同的参数,我需要注意什么才能使切换起作用?

我觉得如果我有这个答案,我也许能够理解这个系统的关键。

非常感谢

0 投票
1 回答
2414 浏览

c# - 来自 UnityEditor.InspectorWindow.GetEditorsWithPreviews 的 NullReferenceException

我有一个非常复杂的 Unity 编辑器脚本来修改模型。通过在资产文件夹中创建一个新对象,然后在其检查器中为其提供模型、一些修改器并按下应用来使用它。这会修改模型并将创建的对象替换为新的对象预制件。

当按下应用时,该方法Apply()被调用,然后运行,控制台打印出:

调用的目标已引发异常。System.Reflection.MonoMethod.Invoke(System.Object obj,BindingFlags invokeAttr,System.Reflection.Binder binder,System.Object[] 参数,System.Globalization.CultureInfo 文化)(在 /Users/builduser/buildslave/mono/build/ mcs/class/corlib/System.Reflection/MonoMethod.cs:232) System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] 参数) (在 /Users/builduser/buildslave/mono/build/mcs /class/corlib/System.Reflection/MethodBase.cs:115) UnityEditor.HostView.Invoke (System.String methodName, System.Object obj) (在 C:/buildslave/unity/build/Editor/Mono/HostView.cs: 272) UnityEditor.HostView.Invoke (System.String methodName) (在 C:/buildslave/unity/build/Editor/Mono/HostView.cs:265) UnityEditor.HostView.InvokeOnGUI (Rect onGUIPosition) (在 C:

我发现了一个 2014 年的问题,有一个类似的错误,但情况不同,这里没有答案。

我检查了MattRix 的反编译 Unity 存储库以了解可能导致异常的原因,即使该存储库的版本为 2017.1.0f3 并且我使用的是 2017.1.1f1,我想我找到了问题发生的地方。在DrawPreviewsAndLabels()

接着

好像调用异常就行了Editor editor = editors[i];。这让我觉得这this.tracker.activeEditors是一个包含null. 这就是我坚持的地方。

什么可能导致这种情况,我可以做些什么或检查来修复这个错误?

编辑:有人提出这可能意味着它this.tracker.activeEditors本身是空的。如果是这种情况,我认为异常会发生在editors.Length并且或至少它不应该进入 for 循环。由于行号可能随着 Unity 版本的变化而变化,该代码中的行实际上可能不是异常的原因,但我无法知道这一点。

我不能轻易修复这个空指针的问题是它发生在编辑器代码中,没有来自我的代码的任何调用,而且我不知道该怎么做,this.tracker.activeEditors或者导致它的任何原因将被正确分配到它应该在的位置。

我是否必须制作一些可能不活跃的东西,以便有活跃的编辑器,不管这意味着什么?

这是我的Apply()方法:

并完整GetEditorsWithPreviews()来自MattRix 的回购

0 投票
1 回答
396 浏览

unity3d - Unity 2017.3 使用 EditorUtility.OpenFolderPanel 时编辑器崩溃

当我使用 EditorUtiliy.OpenFolderPanel 方法获取操作系统上的目录路径时(Unity 2017.3 中的 macOSX,编辑器总是崩溃。当我在 Unity 2017.2 或更早版本的 Unity 中使用相同的方法时,编辑器不会崩溃。

我怎么解决这个问题?请帮我。

谢谢你的时间。