我正在尝试为平台游戏找出简单的自定义2D物理。目前,我正在使用射线投射来找出玩家与地图之间的碰撞。但是,使用射线投射存在一些问题。例如,如果玩家摔倒(向下速度有些高),由于无法向下移动到太深而无法检测到空的空间,则无法在墙上捡起孔,因为它经过了孔。
一种解决方案是移至基于图块的系统,而不是使用射线投射,但我最好不要这样做。
所以我想知道是否有某种解决方案可以找出墙中的空孔,甚至是小的边缘孔,而不会影响性能。
高质量的绘制插图,假定向左移动:
答案 0 :(得分:0)
Physics2D.BoxCast
是我要解决的方法。它会执行您所期望的操作,而不是发出光线,而是像整个盒子一样在距离中进行计算。
用法与光线投射非常相似。示例:
public Collider2D mainCollider;
public Vector2 velocity;
void Update() {
Vector2 origin = new Vector2(transform.position.x, transform.position.y);
Vector2 size = mainCollider.bounds.size;
Vector2 direction = velocity * Time.deltaTime;
float maxDist = velocity.magnitude;
var hit = Physics2D.BoxCast(origin, size, 0, direction, maxDepth);
if (hit == null) {
transform.position += direction;
} else {
transform.position += direction.normalized * hit.distance;
}
}
如果您不喜欢用盒子,那么还有Physics2D.CapsuleCast
和Physics2D.CircleCast
。