Unity - MRTK - HoloLens:修改 2D 按钮的对撞机,使光标靠近
Unity - MRTK - HoloLens: Modify Collider of 2D-Buttons so the Cursor gets closer
我目前的问题是光标离按钮太远。你可以在屏幕截图中看到我的意思。将鼠标悬停在列表中的按钮上如下所示:
问题:我该怎么做才能让光标离按钮更近,因为在 HoloLens 上你可以看到距离?
查看 canvas 上除了按钮以外的其他地方,光标越来越近:
--编辑--
我应该提到场景有一个缩放的立方体(屏幕截图中的灰色东西)和在它前面的世界 canvas(白色东西),其中包含 scrollview/list.
我看到 UI 个元素有相同的行为。
我只能给你一个解决方法。它有点hacky但它有效:
遍历 所有 UI 元素,尤其是 Text
和 Image
并禁用选项 RayCast Target
.
这使得光标位于它们的正上方......但是你会注意到你的Button
现在是non-responsive并且你可以不再与他们互动。
发生这种情况是因为物理系统需要 RayCastTarget 或 Collider
才能触发它的指针事件,例如PointerEnter
、PointerDown
等
因此现在添加一个 BoxCollider
( 而不是 BoxCollider2D
!)到您的 Button
并将其缩放到正确的大小。看起来您正在使用 VerticalLayoutGroup
,因此您可以通过将 RectTransform
设置为居中一次来简单地更正 BoxCollider
的位置(VerticalLayoutgroup
无论如何都会 re-enforce Top-Left锚定)。在我的例子中 BoxCollider
需要 0.8
和高度 0.1
... 对于 z
我选择 0.01
但如果你愿意的话它可以更小
万岁,现在按钮又可以交互了,光标只有它通常的距离 + BoxColliders
选择的 z
厚度的一半。
由于背景立方体有它自己的 BoxCollider
,所以我们不需要为 ScrollView
和 UI 面板添加更多 Colliders
。
如果需要,您可能还需要为滚动条添加一些!
如前所述,这更像是一种快速解决方法,可能不是最终解决方案,因为每当 Button
或 ScrollRect
的大小发生变化时,您都必须重新处理那些硬编码的 BoxCollider
维度以及...
我在 3D 对象上遇到了类似的问题。这可能发生,因为对象碰撞定义。我的意思是,您可以导入渲染网格,但网格对撞机可能不同(更大、更小……)
希望这能解决您的问题 ;)
我目前的问题是光标离按钮太远。你可以在屏幕截图中看到我的意思。将鼠标悬停在列表中的按钮上如下所示:
问题:我该怎么做才能让光标离按钮更近,因为在 HoloLens 上你可以看到距离?
查看 canvas 上除了按钮以外的其他地方,光标越来越近:
--编辑--
我应该提到场景有一个缩放的立方体(屏幕截图中的灰色东西)和在它前面的世界 canvas(白色东西),其中包含 scrollview/list.
我看到 UI 个元素有相同的行为。
我只能给你一个解决方法。它有点hacky但它有效:
遍历 所有 UI 元素,尤其是
Text
和Image
并禁用选项RayCast Target
.这使得光标位于它们的正上方......但是你会注意到你的
Button
现在是non-responsive并且你可以不再与他们互动。发生这种情况是因为物理系统需要 RayCastTarget 或
Collider
才能触发它的指针事件,例如PointerEnter
、PointerDown
等因此现在添加一个
BoxCollider
( 而不是BoxCollider2D
!)到您的Button
并将其缩放到正确的大小。看起来您正在使用VerticalLayoutGroup
,因此您可以通过将RectTransform
设置为居中一次来简单地更正BoxCollider
的位置(VerticalLayoutgroup
无论如何都会 re-enforce Top-Left锚定)。在我的例子中BoxCollider
需要0.8
和高度0.1
... 对于z
我选择0.01
但如果你愿意的话它可以更小
万岁,现在按钮又可以交互了,光标只有它通常的距离 + BoxColliders
选择的 z
厚度的一半。
由于背景立方体有它自己的 BoxCollider
,所以我们不需要为 ScrollView
和 UI 面板添加更多 Colliders
。
如果需要,您可能还需要为滚动条添加一些!
如前所述,这更像是一种快速解决方法,可能不是最终解决方案,因为每当 Button
或 ScrollRect
的大小发生变化时,您都必须重新处理那些硬编码的 BoxCollider
维度以及...
我在 3D 对象上遇到了类似的问题。这可能发生,因为对象碰撞定义。我的意思是,您可以导入渲染网格,但网格对撞机可能不同(更大、更小……)
希望这能解决您的问题 ;)