团结:如何在玩家的墙壁上找到一个空洞?

时间:2019-06-15 20:39:41

标签: unity3d physics

我正在尝试为平台游戏找出简单的自定义2D物理。目前,我正在使用射线投射来找出玩家与地图之间的碰撞。但是,使用射线投射存在一些问题。例如,如果玩家摔倒(向下速度有些高),由于无法向下移动到太深而无法检测到空的空间,则无法在墙上捡起孔,因为它经过了孔。

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

所以我想知道是否有某种解决方案可以找出墙中的空孔,甚至是小的边缘孔,而不会影响性能。

高质量的绘制插图,假定向左移动:

1

1 个答案:

答案 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.CapsuleCastPhysics2D.CircleCast