【发布时间】:2020-12-23 14:04:11
【问题描述】:
短篇小说: 我在世界空间画布上有一个带有单击事件处理程序的按钮。这是一个 3d 碰撞器的内部(在 3d 空间中,不是父级),它有自己的点击事件。 碰撞器总是按预期获得点击事件,因为它靠近相机。 我希望按钮获取事件。
长篇大论: 我有一个人与对撞机啮合。您可以单击它们,然后 OnPointerClick 触发器执行某些操作。 我有一个位于世界空间画布中的按钮,该画布本身位于网格上方并指向正交相机。您单击硬币,OnClick 事件触发执行其他操作。 这两个事件都按预期工作,直到硬币进入网格的对撞机(很多时候都是这样)。此时只有网格碰撞器的 OnPointerClick 事件触发,而不是按钮。 但是,我总是希望按钮优先于对撞机和任何其他对撞机。当画布是屏幕空间时,这更容易,但不是(有理由)。
我该怎么做?
注意事项:
- 按钮永远不会获得 onclick 事件,因此对包含碰撞器的任何过滤都无济于事
- 我已经修改了世界空间画布和相机光线过滤设置,但没有效果。
- 硬币必须是用于自动跟踪的世界空间画布,因为我也使用文本
- IsPointerOverGameObject 没有帮助,因为它适用于任何对撞机,而不仅仅是 UI 元素。更不用说它不会阻止碰撞器消耗点击。通过图层工作的自定义版本也无济于事,因为对撞机 GO 上的 OnPointerClick 仍然会消耗点击。
- 如果可能的话,我不希望任何一个事件都必须进行任何事件过滤和传递,它们应该是原子的。任何过滤都应该通过设置对象的属性和 Unity 的固有功能如果可能
- 重申一下,编写一个函数来查找光线中的所有对象,然后首先选择 UI 层上的对象并没有帮助。因为这并没有改变这样一个事实,即对撞机仍然是唯一获得事件的东西,然后您必须手动将其传播到按钮......我不想这样做。
【问题讨论】:
-
欢迎,这是 Unity 中的一个古老问题:/ 我不明白你的 exact 问题 100% 但请阅读这篇文章 - stackoverflow.com/a/35530316/294884 - 让我知道问题是否已为您解决!
-
但是你得到了点击事件,你可能只是忽略了另一个对撞机所在的图层?你有没有试过把你的父对撞机放在
IgnoreRaycasts层上?或者在你的父对撞机上有一个类,它转发一个光线投射并尝试点击按钮..只有当它错过它时它才会赢得东西,否则执行按钮
标签: unity3d