我正在尝试找出防止播放器穿过墙壁和其他物体的最佳方法是什么?

时间:2019-10-23 15:03:38

标签: c# unity3d

我可以考虑要在游戏中使用哪些对象,然后将它们添加为盒式对撞机或网格对撞机,然后开始设置它们。或者我可以使用射线投射并检测与要避免穿过的物体之间的距离?在raycast中使用距离计算是否合理?

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.3f,则玩家将停止前进。

1 个答案:

答案 0 :(得分:1)

使用统一性,您实际上并不想从后面的代码中做任何这些事情,相反,您会在“玩家”上拥有一个RigidBody或RigidBody2D组件,然后是一个盒子Collider或Mesh Collider(或碰撞对象的2d版本。

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

另一个建议是,在后端处理冲突时,您不想使用FixedUpdate,因为对象运行的速度足够快,它将在两次更新之间通过对撞机