Unity Player跳转:什么时候用RaycastHit,什么时候用OnCollisionEnter

Unity Player jump: when to use RaycastHit and when OnCollisionEnter

我目前正在使用 C# 学习 Unity,现在学习了两种执行防止双跳的玩家跳跃的方法。

第一个是GetComponent<Rigidbody>().AddForce方法,通过OnCollisionEnter防止双跳,例如在 transform.tag == “地板”上。

第二个是向上的 RaycastHit 和速度。

对我来说,第二种方法效果不佳。我还能做二段跳

我现在想知道是否有人可以向我解释为什么或何时使用一种方法优于另一种方法或哪种方法可能更好。

提前致谢!

这两种方法都不一定优越。这完全取决于您的游戏需求。

在玩家模型的“脚”处使用放置良好的碰撞器来检查是否接地效果很好,但重点在于“放置良好”。位置不佳或 sized/shaped 碰撞器不当将导致错误 positives/negatives。例如,玩家可能会击中天空中“地面”平台的底面并将接地设置为真。或者,如果玩家站在平台的边缘,他们的地面检查对撞机可能不会与他们站立的表面发生碰撞,从而导致接地错误。以及许多其他边缘情况。

使用光线投射可以更精确地控制何时何地检查接地性,但是,从处理的角度来看,它的成本更高。光线投射还允许检查即将发生的地面碰撞。

一个复杂的系统可能会同时使用光线投射和碰撞检测来涵盖所有必要的基础案例。