Unity:如何为玩家在墙上找到一个空洞?

Unity: How to find a empty hole in a wall for player?

我正在尝试为平台游戏找出简单的自定义 2D 物理。目前我正在使用光线投射来计算玩家和地图之间的碰撞。但是使用光线投射有一些问题。例如,如果玩家正在下落(向下速度有点高),则它无法捡起墙上的洞,因为它由于向下移动太远而无法被检测为空 space.

一个解决方案是移动到基于图块的系统而不是使用光线投射,但我最好不要这样做。

所以我想知道是否有某种解决方案可以找出墙上的空洞,即使是小边缘的洞也不会对性能产生巨大影响。

高质量绘制插图,假设向左速度:

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 and Physics2D.CircleCast