对撞机触发器和运动

Collider Trigger and Movement

我正在开发一款塔防类游戏。我有一个带有球体对撞机的玩家游戏对象,以及向其发射炮弹的炮塔。射弹有胶囊对撞机。当玩家游戏对象移动时,OnTriggerEnter 事件会为射弹的碰撞体触发。当玩家不动时,他们不会。当我添加新炮塔时也是如此。炮塔有一个大型球体对撞机,用于确定游戏对象是否足够近以进行射击。当我在播放时向场景添加新炮塔时,OnTriggerEnter 在我移动玩家游戏对象之前不会发生,即使它已经在炮塔的球体碰撞器内。

视频:http://screencast.com/t/x1QKtNEK

我该如何解决这个问题?我怀疑这是一个错误,只是我不了解 Unity 更新,或者与碰撞器触发器有关。

我不知道这是否是一个错误,但 unity's documentation 指出

"OnTriggerStay is called almost all the frames for every Collider other that is touching the trigger."

也许同样适用 OnTriggerEnter 和 "almost" 是这里的问题。

你至少在碰撞的其他部分有刚体吗?相同的文档(和 OnTriggerEnter 文档)还指出

"Note that trigger events are only sent if one of the colliders also has a rigidbody attached".

希望您能找到解决问题的合适方法,但作为解决方法,您可以尝试将玩家的对撞机设置为 child GameObject 并在每一帧上稍微移动它。如果您在 child GameObject 上没有任何与渲染相关的内容,那么没有人会注意到黑客攻击。

或者可以通过在更新函数中计算到玩家的距离来处理射弹。炮塔可以在它们的启动函数中进行相同的计算。