【问题标题】:Determine on which collider the collision has taken place确定碰撞发生在哪个对撞机上
【发布时间】:2015-04-27 19:27:41
【问题描述】:

我有一个附加了两个球体对撞机的游戏对象。一个检查了 IsTrigger,另一个没有检查。

我想在不同碰撞器发生碰撞时执行不同的语句集。例如,我想为两种不同的碰撞播放不同的声音。有没有办法实现它?

我尝试了 OnTriggerEnter() 但不幸的是,由于其他碰撞对象已触发碰撞器,因此两种碰撞类型都会调用它。我只是想如果我们能以某种方式找出碰撞发生在游戏对象的哪个对撞机上,我们将能够实现它。

那么有什么办法可以解决这个问题吗?

【问题讨论】:

  • 这很奇怪,如果只有一个被检查为 IsTrigger,那么只有它应该调用 OnTriggerEnter。您是否尝试过为每个 SphereCollider 使用两个子游戏对象?
  • OnTriggerEnter 对我观察到的两个对撞机都有效。
  • 我几乎明白了。我认为使用子游戏对象是一个很酷的主意。

标签: unity3d


【解决方案1】:

我已经使用 Unity 多年,遇到过很多与糟糕的软件设计相关的此类问题。我希望 Unity 开发人员在未来的版本中能够更加谨慎地处理物理。

同时,您可以使用Physics.OverlapSpherePhysics.CheckSphere 手动检查是否有东西与您的对象发生碰撞。删除您用作触发器的对撞机并使用这些方法而不是OnTriggerEnter。这有点 hacky,但我认为这可以完成工作。

【讨论】:

    【解决方案2】:

    使您的碰撞器在检查器中可见(将它们公开或在其前面添加[SerializeField]),然后以这种方式将碰撞器绑定到代码。

    然后,在您的碰撞中,将碰撞对象与保持碰撞器的变量进行比较,以便将它们分开。

    【讨论】:

      【解决方案3】:

      要检测OnTriggerEnter 中的源触发器,您必须使用具有多个游戏对象托管触发器和卫星脚本的解决方法。

      请允许我链接到我在 gamedev 上的答案 SO: https://gamedev.stackexchange.com/a/185095/54452

      【讨论】:

        猜你喜欢
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多