问题标签 [unity3d-gui]

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 回答
4048 浏览

unity3d - 统一滚动数字计数器

我想制作一个显示数字的计数器,例如 899,然后数字向上移动到 900,或者更简单地说,7 在 8 滚动时滚动出去。我知道如何让它们改变,但我不知道如何做滚动效果?

0 投票
1 回答
3642 浏览

unity3d - Unity3D UI中图像高度恒定的水平滚动视图 - 如何?

我想在 Unity3D 5 UI 中使用从 web 下载的水平图像实现滚动视图,它们具有不同的随机纵横比,但我希望它们是恒定的高度。宽度取决于它们的纵横比,如下所示:

在此处输入图像描述

我尝试使用水平布局组,但图像太少,所以当我希望它们保持恒定高度并拉伸父级宽度时,它们都可以放入组中。所以,就像父母的宽度是主要的,它会影响孩子,但我希望孩子影响父母的总宽度(在添加新的孩子图像时扩展它)。

任何想法如何实现这一目标?谢谢。

0 投票
1 回答
1247 浏览

unity3d - Unity3D UGUI Canvas Gizmo

是否可以在场景视图中绘制 Gizmo ( https://docs.unity3d.com/ScriptReference/Gizmos.html )..但覆盖 UGUI 画布(在场景视图内)而不是特别是在世界空间中?我希望在场景视图中更全面地勾勒出一些 UI 元素,而不是那里显示的香草 Unity RectTransform。

我们查看了使用https://docs.unity3d.com/ScriptReference/Gizmos.DrawGUITexture.html但这似乎回退到旧式 UI 布局并且没有考虑 UI 画布可以是多种不同的渲染模式调成。

0 投票
1 回答
524 浏览

unity3d - 扩展编辑器以突出显示层次结构的问题

我对扩展 Unity 编辑器非常陌生,并将这个脚本拼凑在一起,突出显示层次结构中的选定对象。问题是,当我在编辑器中并且堆栈顶部(场景名称)出现在树上时,整个层次结构变得不可见!当我向下滚动以使场景名称消失时,它会自行修复。我附上了图片,让您更好地了解正在发生的事情。当我有一堆对象时,这个问题很小,但在新场景中将无法使用。

控制台显示:“对象引用未设置为对象的实例” HierarchyHighlighter.HierarchyWindowItem_CB(Int32 selectionID, Rect selectionRect) (at Assets/HierarchyHighlighter.cs:18)

图像: 正常运行

无法正常运作

谢谢您的帮助!

0 投票
1 回答
605 浏览

c# - 在 Unity3D 中管理复杂的预制层级

我在几个地方问过这个问题,但还没有完全弄清楚,所以也许这里的一些聪明人会知道如何解决这个问题。

在项目中维护深层嵌套的预制件层次结构的最佳方法是什么?比如说,我们有几个 GUI 屏幕,由较小的通用组件组成。为了简单起见,我们将前者称为“视图”,而将后者称为“组件”。视图处理语义(例如库存视图、商店视图);组件是可配置的,但没有附加任何业务逻辑(例如,按钮只关心其 OnTap 回调/事件处理程序)。

视图和组件都可以嵌套。

GUI 视图需要在多个场景中重复使用。

Unity 中这种方法的主要问题是,任何嵌套层次结构一旦变成预制件,就会失去对其子预制件的引用,就像下面这个(完全虚构,但仍然有效)示例:

- storeView - UIViewHeader - UIHeaderLabel<Text> - UIList - UIListItem - UIThumbnail - UITitleLabel<Text> - UISubTitleLabel<Text> - UIPrimaryButton<Button> - ...

我想将所有这些小型 UI* 组件保留在单独的预制件中,但也保留 storeView 预制件,以便我可以轻松地将其添加到不同的场景中。不幸的是,一旦我们创建了 storeView 预制件,所有的 UI* 预制件引用都会丢失。鉴于此,我们可以尝试一种不同的方法,在这种方法中,我们将其保留为空并选择以下几个选项之一,而不是使用包含内容的 storeView 预制件:

  1. 在运行时将行为附加到 storeView 并加载子预制件
    • 缺点:使设计人员的工作流程更加复杂,将复杂性置于脚本中,从开发人员的角度来看,这也可能更容易出错
    • 优点:更容易在场景之间重用 storeView,组件预制可以样式化,全局修改
  2. 将 storeView 保留为空预制件,并在需要它的每个场景中重新组装它
    • 缺点:组件需要手动连接,仍然很容易意外保存整个 storeView 并丢失 prefab 引用
    • 优点:保证组件预制参考得到维护,允许视图之间存在细微差异(恕我直言,这实际上是一个问题,因为这些应该属于配置层)
  3. 将整个 storeView 保存为预制件
    • 缺点:扩展性非常大,使得迭代新功能或小的 UX 更改更耗时(额外的 QA、验收测试等......)
    • 优点:这是一个快速而肮脏的解决方案,适用于小型项目
  4. 使用 Prefab Evolution 或类似的
    • 缺点:我假设该包将被路线图上的嵌套预制件淘汰?需要取决于 3rd 方代码并且可能不够灵活(这里有什么意见吗,伙计们?)
    • 优点:从我看到的许多(混合的)评论中,有些评论非常积极。然而,项目越复杂,这些评论就越不积极。
  5. 编写一堆自定义编辑器脚本:
    • 缺点:耗时,而且 - 似乎应该由平台提供,即使它主要处理游戏
    • 优点:完全控制行为,开发人员可以根据设计师的反馈进行改进。有人可能会争辩说,将实现、测试和对设计人员友好的工具作为功能要求进行自律听起来像是一种良好的设计实践(从而减少了技术债务,更容易维护)

这是我个人的,诉理想主义,不切实际的解决方案*:

使用组件化架构,默认情况下,子预制件引用存储在复杂预制件中。在内部将它们视为移动设备(Cocoa)上的 UIView 和子视图,或者 React 中的组件类或更好的功能组件 - React/Cycle/Elm/任何与 FRP 配合得很好的东西(是的,我知道这些方法在很多方面都不同,但关键是可组合性,可以通过功能组合、装饰器等来实现……)。

  • 缺点:我认为我在这里遇到的困难来自于我缺乏 Unity 的经验,并且有一个更明显的,也许是惯用的解决方案(我很乐意要求:))
  • 优点:使测试和迭代新功能更容易,使预制件更强大,同时不会失去任何好处(如果我错了,请纠正我,我仍然熟悉 Unity)

  • 请不要以为我期望 Unity 提供所有这些,但这是可能的方向之一,即使其中 1% 是正确的。

澄清一下,这并不是对 Unity 的抱怨,作为一名以前使用移动(原生)和 Web 工作的开发人员,我发现它解决了我的许多问题,以及其中一些解决方案的简单程度,这给我留下了深刻的印象。

0 投票
1 回答
264 浏览

c# - Unity 2D C# - 对象内部没有碰撞

我想知道,如何在物体内部不发生碰撞。我有一个大圆圈,圆圈内是一个较小的正方形。游戏开始时,圆圈正在缩小。我想要的是检查碰撞,如果圆圈接触或在正方形内。

你能帮我么 ?谢谢

0 投票
2 回答
1885 浏览

c# - 如何获取文本并将其保存在 InputField 中?

在我的情况下,我有一个数组InputFields -六个 InputFields。如何从每个 InputField 中获取文本并将其保存?

一切都应该像这样工作:我打开应用程序,更改一个、两个或所有输入字段,然后关闭应用程序。再次,我打开,输入字段必须是我之前写的值。

我有一个看起来必须正常工作的代码,但是这个代码的工作方式是这样的:它只接受用户输入的最后一个值并将其写入最后一个输入字段。

我初始化的输入字段数组在 Unity 中拖动脚本组件中空闲单元格中的每个输入字段。

0 投票
1 回答
2078 浏览

c# - 如何统一(删除/使不可见/更改颜色)输入字段的边框?

我怎么能remove border for input field?或者我可以让它不可见,改变颜色?我还没有在谷歌中找到这个问题的答案。我试图在 Inspector 中更改边框颜色,但没有。请帮帮我。

0 投票
3 回答
2659 浏览

c# - Unity UI - 光标锁定时与世界空间 UI 交互

当设置为时,我正在尝试使用第一人称控制器与世界空间 UI交互。Cursor.lockStateCursorLockMode.Locked

世界空间用户界面和角色 世界空间用户界面和角色

但是当光标被锁定时,光标位置设置为(-1, -1) ,这是从Inspector告知的。

(-1, -1) 的光标位置 (-1, -1) 的光标位置

EventSystem.RaycastAll我使用,Sreen.width/2和执行了图形光线投射PointerEventDataEventSystem.current.RaycastAll收集屏幕中间的所有 UI 对象,但不向它们发送任何事件。

我还尝试ExecuteEvents.Execute<IEventSystemHandler>手动将事件发送到 UI 目标。当我向它发送“提交”事件时,这适用于按钮。显然这不是一个优雅的解决方案。我也不知道如何向滑块发送消息。

这种疯狂的尝试在 Windows 上全屏播放时有效。2333

相关资源

0 投票
2 回答
2284 浏览

unity3d - Unity3D:void OnEnable() 在编辑器模式下被不可预测地调用

我实现了 OnEnable() 并且它总是按预期在播放模式下被调用。但在编辑器模式下,一些组件调用 OnEnable() 而其他组件则不调用

我需要在编辑器模式下调用 OnEnable() 或其他方法来设置组件以便能够对其进行原型设计。

如果我从 UnityEngine.UI.Image 扩展类,则在编辑器模式下调用 OnEnable()。如果我从 MonoBehavior 扩展类,则它不会在编辑器模式下调用 OnEnable(),但仍会在播放模式下调用。

是否有任何说明为什么它被调用或不被调用。