我试图弄清楚防止玩家穿过墙壁和其他物体的最佳方法是什么?



我可以想到我将在游戏中使用什么对象,并为它们添加一个长方体碰撞器或网格碰撞器,然后开始设置它们。或者我可以使用光线投射来检测与我想避免穿过的物体的距离?将距离计算与光线投射结合使用是否符合逻辑?

void FixedUpdate()
{
Vector3 direction = new Vector3(transform.position - lastPosition);
Ray ray = new Ray(lastPosition, direction);
RaycastHit hit;
if (Physics.Raycast(ray, hit, direction.magnitude))
{
// Do something if hit
}
this.lastPosition = transform.position;
}

不确定这是否是适合玩家的脚本。也许需要使用图层?但逻辑是,如果玩家距离物体0.3英尺,玩家将停止向前移动。

使用unity,你真的不想从代码后面做任何这些事情,相反,你会在你的"播放器"上有一个RigidBody或RigidBody2D组件,然后在你的碰撞对象上有一台长方体碰撞器或网格碰撞器(或它们的2d版本(。

这将处理所有碰撞,并在玩家击中该物体时停止玩家。

另一个建议是,当在后端处理冲突时,你不想使用FixedUpdate,就好像一个对象移动得足够快一样,它会在更新之间通过碰撞器

相关内容

最新更新