我可以考虑要在游戏中使用哪些对象,然后将它们添加为盒式对撞机或网格对撞机,然后开始设置它们。或者我可以使用射线投射并检测与要避免穿过的物体之间的距离?在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,则玩家将停止前进。
答案 0 :(得分:1)
使用统一性,您实际上并不想从后面的代码中做任何这些事情,相反,您会在“玩家”上拥有一个RigidBody或RigidBody2D组件,然后是一个盒子Collider或Mesh Collider(或碰撞对象的2d版本。
这将处理所有碰撞,并在玩家撞到该物体时将其停止。
另一个建议是,在后端处理冲突时,您不想使用FixedUpdate,因为对象运行的速度足够快,它将在两次更新之间通过对撞机