【问题标题】:World space button click event to take priority over the collider's click event it's inside?世界空间按钮点击事件优先于它在里面的对撞机的点击事件?
【发布时间】: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


【解决方案1】:

我已经能够通过将按钮的世界空间画布放在排序层 1 上来解决此问题。这样,即使它在碰撞器后面,它也会首先注册。 我希望存在的好而清晰的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2011-12-30
    • 2023-04-09
    相关资源
    最近更新 更多