如何检测 Unity 中的潜在碰撞?
How to detect a potential collision in Unity?
我有一款 Unity 游戏是我的业余爱好,我遇到了一个关于如何最好地处理碰撞检测的有趣问题。我的问题是我的游戏是一款 2D 回合制游戏,游戏对象每次可以在非基于网格的世界中移动固定距离 space。我的游戏对象目前使用 BoxCollider2D 来处理碰撞检测,但我需要能够在实际移动之前确定是否会发生碰撞,这现在会导致游戏对象与另一个游戏对象重叠并触发 OnCollisionEnter2D 事件.这里的最终想法是允许玩家计划移动并在对象旁边显示“导航指南”以显示基于游戏对象移动能力的移动选项。
是否可以使用我的游戏对象的碰撞器,变换其位置以移动或旋转它,查看是否会发生碰撞,但实际上不移动对象本身?
你的意思是像简单地使用 Rigidbody.SweepTest
? ;)
Tests if a rigidbody would collide with anything, if it was moved through the Scene.
来自示例
public class ExampleClass : MonoBehaviour
{
public float collisionCheckDistance;
public bool aboutToCollide;
public float distanceToCollision;
public Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
RaycastHit hit;
if (rb.SweepTest(transform.forward, out hit, collisionCheckDistance))
{
aboutToCollide = true;
distanceToCollision = hit.distance;
}
}
}
哦,刚刚注意到,实际上这仅适用于 3D 刚体。
对于 2D 这不存在,但可以使用 Collider2D.Cast
进行复制
Casts the Collider shape into the Scene starting at the Collider position ignoring the Collider itself.
我有一款 Unity 游戏是我的业余爱好,我遇到了一个关于如何最好地处理碰撞检测的有趣问题。我的问题是我的游戏是一款 2D 回合制游戏,游戏对象每次可以在非基于网格的世界中移动固定距离 space。我的游戏对象目前使用 BoxCollider2D 来处理碰撞检测,但我需要能够在实际移动之前确定是否会发生碰撞,这现在会导致游戏对象与另一个游戏对象重叠并触发 OnCollisionEnter2D 事件.这里的最终想法是允许玩家计划移动并在对象旁边显示“导航指南”以显示基于游戏对象移动能力的移动选项。
是否可以使用我的游戏对象的碰撞器,变换其位置以移动或旋转它,查看是否会发生碰撞,但实际上不移动对象本身?
你的意思是像简单地使用 Rigidbody.SweepTest
? ;)
Tests if a rigidbody would collide with anything, if it was moved through the Scene.
来自示例
public class ExampleClass : MonoBehaviour { public float collisionCheckDistance; public bool aboutToCollide; public float distanceToCollision; public Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { RaycastHit hit; if (rb.SweepTest(transform.forward, out hit, collisionCheckDistance)) { aboutToCollide = true; distanceToCollision = hit.distance; } } }
哦,刚刚注意到,实际上这仅适用于 3D 刚体。
对于 2D 这不存在,但可以使用 Collider2D.Cast
Casts the Collider shape into the Scene starting at the Collider position ignoring the Collider itself.