【问题标题】:Unity - Add call back to GameObject OnMouseDown EventUnity - 添加对 GameObject OnMouseDown 事件的回调
【发布时间】:2016-02-11 23:37:32
【问题描述】:

目前,当我尝试检测对象是否已被鼠标单击/交互时,我会在该游戏对象上创建一个脚本,然后定义 void OnMouseDown() 并在其中应用功能。如果我想在另一个附加到 GameObject 的脚本中触发函数,我会通过 GetComponent<>() 引用调用它。

有没有办法从另一个 GameObject 上的脚本向 OnMouseDown 事件添加回调?可能以相同的方式分配和调用委托/事件?比如:gameObjectReference.GetComponent<BoxCollider>().onmousedownevent += MyFunction; 这样它会在鼠标按下时自动调用这个函数?

注意:我知道您可以使用光线投射来实现类似的效果,但我的问题是关于将回调附加到现有 Unity 事件。

【问题讨论】:

  • 当然,使用 Unity 事件 - 您已经准确地描述了它们。只需点击手册或十亿质量检查或教程
  • 我投票决定将此问题作为离题结束,因为手册中的完整信息可立即获得 unity3d.com/learn/tutorials/modules/intermediate/scripting/… 也请查看 forum.unity3d.com/threads/…
  • 顺便说一句,如果您正在触摸/输入,这就像统一中最基本的、压倒性的问题:answers.unity3d.com/questions/784617/…
  • @JoeBlow 那么如何将它附加到触发 OnMouseDown 的预先存在的事件?因为我不想在对象上创建额外的脚本来触发此类事件。您链接的视频描述了如何创建事件/委托系统,我不想创建一个新的,我想将回调附加到该对象的预先存在的统一事件触发器,这就是我不'不明白..?
  • 在相关的 OnMouseDown 中,只是 more.Invoke,然后将任何你想要的东西拖到more 这是一个public UnityEvent。它“少于”一行代码,您只需拖动即可。

标签: c# unity3d


【解决方案1】:

1) 我理解你的意思

pseudocode:
gameObjectReference.GetComponent<BoxCollider>().onmousedownevent += MyFunction

没有办法做到这一点。

2) 请理解:实现您的目标(优雅地)非常容易。在脚本“b”中添加一个 UnityEvent,在 OnMouseDown 中调用它。将任何你想要的东西拖到那里。对于刚接触 Unity 的读者,请尝试使用 UnityEvent,因为它经常被使用

3) AI 提到你可以有点通过使用OnPointerDown(PointerEventData eventData) 系统来做你想做的事,但这只是强调你不能做你所要求的,用 OnMouseDown 去做。

对不起,这个可怕的消息。

【讨论】:

  • 不用担心,感谢 cmets 和最终答案。 :)
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
相关资源
最近更新 更多