【问题标题】:Disabling mouse Input to a GameObject禁用对游戏对象的鼠标输入
【发布时间】:2015-10-27 02:44:38
【问题描述】:

Unity 中有没有一种方法可以在不移除/禁用碰撞框的情况下禁用鼠标对游戏对象的输入?

我想编写一个脚本,它会在对象被按下一次后忽略鼠标输入。在脚本范围内这样做并不难,但我希望该对象上的其他脚本忽略鼠标输入而不修改所有其他脚本。

【问题讨论】:

  • 你能澄清一下吗?我看不出你想要什么。
  • 我想制作一个脚本,在单个输入(例如 OnMouseDown())后忽略所有后续输入。不仅在该脚本的范围内,还包括附加到该游戏对象的其他脚本。所有这些都无需移除/禁用对象碰撞框。

标签: c# unity3d


【解决方案1】:

根据OnMouseDown documentation

对属于 Ignore Raycast 层的对象不调用此函数。

因此,执行此操作的一种方法是将对象的图层切换为忽略光线投射。

this.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");

但如果您有其他依赖于光线投射的功能,这些功能也会被禁用(除非它们在其他层中进行光线投射)。

【讨论】:

  • 这对我来说是新信息。我一直认为您仍然需要过滤光线投射中的图层。
  • 我不认为光线投射总是需要一个层。我认为它有一个可以覆盖的默认层。此外,OnMouseDown 是由 Unity 正在执行的 Raycast 触发的,因此我认为您无法更改其图层。我可能错了。
【解决方案2】:

这可以通过放置一个验证/过滤输入的脚本来实现。它可能是另一个脚本中的单个 bool reveiceInput,每次您获得输入时都会读取该脚本。因此,如果 receiveInput 在第一次 mouseDown 之后为 false ,则其他人不会影响它。

【讨论】:

  • 如果不编辑该对象上的现有脚本,我不明白这将如何工作。
  • @CreativeMagic 当然你必须编辑脚本,但是你提到过,你只是不想移除碰撞器。
  • 阅读我的问题的最后一句话,你会看到我确切地说我不想编辑所有其他脚本。请注意,问题也没有被编辑;)
  • @CreativeMagic 啊,我的错 :)。
猜你喜欢
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2020-03-01
相关资源
最近更新 更多