问题标签 [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 回答
1629 浏览

c# - 以水平、令人愉悦的方式显示属性

我有两个整数属性,想在一行中显示它们。

但是看起来很宽。 在此处输入图像描述

如果我改变检查器的宽度,它看起来像这样 在此处输入图像描述

所以我想删除标签与其输入字段之间的那些大空格,并在属性之间添加一些空格。

听说Property Drawer可以帮到我所以我试了一下

但它不会将输入字段移动到更靠近相应标签的位置,我只能更改输入字段的宽度。

如何删除标签和输入字段之间的空格,并在不同属性之间添加空格?

0 投票
1 回答
1244 浏览

android - 在不将项目平台切换到安卓的情况下,使用 android 设备进行统一远程工作

我从过去几个小时开始尝试在三星 glaxy 设备上播放统一远程设备,但无法做到。我已确认所有步骤:

  1. 在 Unity 中打开编辑器设置(菜单:编辑 > 项目设置 > 编辑器)并从 Unity 远程部分选择要使用的设备。

但我没有将我的平台切换到 android(我不想要它,因为我只想测试将在 Windows 触摸屏上运行的触摸)。那么我玩遥控器缺少什么?在使用统一遥控器之前,这是否必须在 Android 上切换平台。

0 投票
1 回答
2818 浏览

unity3d - 如何在编辑模式下通过脚本在层次结构中添加游戏对象?

我想创建一个菜单项,该菜单项可以构建带有子项和组件的游戏对象。我不能对整个对象使用预制件,因为我需要孩子是单独的预制件。

0 投票
2 回答
6421 浏览

c# - Unity 广告不会自动初始化?

我在我的 android/iOS 游戏中使用基于统一奖励的广告。但是当我检查它时 Advertisement.IsReady (rewardVideoID);

总是返回假。

此外,如果签入 Awake unity 广告初始化是错误的

但是我在 Unity 编辑器中启用了广告,所以在这里我想知道为什么统一广告没有自动初始化。我在之前的项目中使用了统一广告,它会自动初始化。

0 投票
1 回答
2134 浏览

user-interface - 带有 GUI 控件的 Unity3D 可拖动 GUI.Box

我正在 Unity 中构建一个自定义节点编辑器窗口,并且我查看了各种资源,例如用于构建GUI.Box节点窗口的资源。

这很好用,我可以按照我想要的方式拖动这些窗口,但是一旦我将控件添加到GUI.Box,我希望它们覆盖Drag()我编写的函数。

这是问题的一个示例 - 当我向上移动垂直滑块时,整个框都会随之拖动。

垂直滑块问题

有没有办法使用 修复这种行为GUI.Box,或者我应该回到GUI.Window它的内置GUI.DragWindow()

这是我正在使用的代码的简化版本:

EditorMouseInput.cs:

BaseNodeEditor.cs:

BaseNode.cs:

垂直滑块添加到派生的 JumpNode 类中。构造滑块的辅助类的摘录:

我明白为什么这不能满足我的要求,但我不知道如何去做,因为 GUI 控件不是 GUI.Box 的一部分。

任何帮助或建议,甚至是对另一个来源的轻推都将不胜感激 - 我觉得我已经使用了我脑海中存在的所有搜索词!

编辑 - 已解决:感谢 Kleber 为我解决了这个问题。万一其他人遇到这个或类似的问题,我的解决方案是意识到 GUI 控件会自动消耗鼠标左键事件,因此单击滑块意味着没有传播到 Box 以检查它是否被单击。

我需要做的是将 Node 类中的 IsSelected 和 IsDragged 标志分开,并在 mouseUp 上清除 IsDragged。我最初使用 IsSelected 来标记启用和选中的拖动(可以一次选择和拖动多个节点)。

0 投票
2 回答
1813 浏览

c# - Unity EditorGUI.PropertyField 无法完全禁用数组或列表

所以,这里是代码:

这是一个简单的自定义属性和属性抽屉,它允许我们禁用所有标记(通过 [ReadOnly])在 GUI 中禁用的字段。所以列表的元素被禁用,但是列表的大小仍然在 GUI 中启用。我该如何解决?

谢谢你。

更新:请看看它在检查器中的外观

0 投票
1 回答
2473 浏览

c# - 如何仅在 Unity 编辑器启动时运行脚本?

我正在为 Unity 编辑器编写自己的自动保存脚本,我希望它在启动编辑器时运行其设置方法。我尝试使用 InitializeOnLoad,但它不仅在编辑器启动时调用静态构造函数,而且在每次按下播放按钮时调用静态构造函数,再次初始化我的脚本并重置其所有计时器。

我试图设置一个条件来初始化脚本,只有当定时器的值设置为默认值时,但显然 InitializeOnLoad 创建了我的脚本的另一个实例,所以一切都被重置并且条件是无用的。

然后我想在启动时在编辑器首选项中创建一个 bool 来检查,当我按下播放时,脚本是否已经启动过。但是当编辑器关闭时我找不到重置这个值的方法,所以当我再次启动编辑器时,布尔值仍然为真并且自动保存没有开始。

我还尝试使用 ExecuteInEditMode 来调用 OnDestroy 方法并将编辑器首选项设置为 false,但当然它仅在场景中的 GameObject 附加了脚本实例时才有效,而编辑器脚本并非如此。

有解决方案吗?提前致谢。

0 投票
0 回答
503 浏览

macos - Unity 编辑器内存泄漏

我在 unity3d 工作,最近遇到了一个非常令人费解的问题(而且确实是项目的终结者)。基本上,当我在编辑器中按播放,然后按停止时,unity 会占用我的一些内存,并且拒绝归还它(当我的 mac 内存不足时我发现了这一点)。在我的主要项目中,每次迭代都会消耗大约一半的时间(显然是一个真正的问题)。我开始从我的项目中删除代码和对象,但无济于事。最终我刚刚开始了一个新的空项目(甚至移除了相机和灯光),你瞧,同样的问题。不是半场演出(更多的订单是 20 兆),但仍然是泄漏。我不知道这可能是什么。以下是一些需要注意的事实:

  • 我最近升级到 Unity 2017
  • 我正在使用 16 GB 内存的 macbook pro
  • 在活动监视器中,使用的总内存在每次播放/停止迭代时都会增加,但 Unity 进程内存不会。事实上,我找不到使用额外内存的进程。
  • 我经常运行多个 Unity 实例,并通过 UNET 相互通信。但是,在没有打开其他实例的情况下运行的空项目仍然泄漏。
  • 当我让计算机进入睡眠状态时,会发生以下两种情况之一:Unity 实例崩溃,或者大量内存将被释放(大约一半的内存被启动和停止 Unity 占用)

有人知道这可能是什么吗?有没有人经历过类似的事情?如果这是一个 Unity 错误,我将如何通知正确的人/避免问题?如果我做错了什么,我应该改变什么?

0 投票
0 回答
309 浏览

c# - 自定义编辑器每帧重置列表

我正在尝试统一创建一个可重新排序的列表,该列表存储自定义类的列表:

这个类在一个列表中:

这个列表显示如下:

现在,在我的场景中,有一些 UI 元素正在调用 OnboardingItemList 上的 Show() 和 Hide() 函数。问题是我得到了一个超出范围的异常,所以我在 Update() 中放了一个 Debug.Log,我看到列表的计数在不断变化。一帧显示为 2,下一帧显示为 0,并且不断来回变化。我假设某些东西不断将列表重置为新列表,并且编辑器不断将我的自定义编辑器的值分配给它。这怎么可能解决?

0 投票
2 回答
4733 浏览

c# - 如何获取当前目录的路径?(ScriptableObject, UnityEditor.AssetDatabase)

对不起我的英语(谷歌翻译)。以下是在选定目录 (Assets/Resources/TestObject.asset) 中创建资产 (ScriptableObject) 的代码片段:

如何获取我所在目录的路径?为了不手动硬编码路径,而是将此游戏对象保存在我调用该方法的同一文件夹中。


例如:

1)我从Assets/TestFolder/TestFolder2调用该方法。

2)并在同一目录中创建一个资产(TestObject)。并且不在Assets/Resources中创建。

综上所述,我需要通过菜单(Assets/Create/Test Object)获取调用该方法的目录的路径。


另外:我可以在创建游戏对象后立即重命名它吗?与其他对象(脚本、文件夹等)一样。

提前感谢您的回答!


示例(屏幕截图): 如何获取以红色突出显示的路径。我将通过菜单(创建/测试对象)调用该方法。在我选择的目录中(Assets/TestFolder/TestFolder2)。并且资产是在那里创建的。而不是在Assets/Resources中。我需要一个向我返回字符串的方法:Assets/TestFolder/TestFolder2