Unity 中的 Box Collider 2D 重叠

Box Collider 2D overlapping in Unity

我有两个带有盒子对撞机的游戏对象。一个是玩家,以固定的速度向另一个移动。碰撞停止了玩家(Poo 角色;D)

但是它们重叠了,你可以在这里看到:

我不知道为什么会这样。与顶部或底部碰撞效果很好......同样的效果发生在左侧。绿色方块只有碰撞器,没有刚体。

动图:

另一个 Gif,带有 MovePosition() ...从顶部碰撞有效,但 "reentering" 停止了角色。为什么?!:

  1. GIF,上下移动没问题,在方块顶部左右移动会减慢他的速度。诡异的...

移动脚本:

public class PlayerController : MonoBehaviour
{
    public float Speed = 10f;

    private Rigidbody2D rb2D;

    private Vector2 DirectionLeft;
    private Vector2 DirectionRight;
    private Vector2 DirectionUp;
    private Vector2 DirectionDown;

    private Vector2 CurrentDirection;

    // Use this for initialization
    void Start()
    {
        rb2D = GetComponent<Rigidbody2D>();

        DirectionLeft = new Vector2(Speed*-1, 0);
        DirectionRight = new Vector2(Speed, 0);
        DirectionUp = new Vector2(0, Speed * -1);
        DirectionDown = new Vector2(0, Speed);

        CurrentDirection = DirectionLeft;
    }

    void SetAnimationDirection()
    {
        Vector3 scale = transform.localScale;

        if (CurrentDirection == DirectionLeft)
            scale.x = 1;
        else
            scale.x = -1;

        transform.localScale = scale;
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        if (moveHorizontal > 0)
            CurrentDirection = DirectionRight;
        if (moveHorizontal < 0)
            CurrentDirection = DirectionLeft;
        if (moveVertical < 0)
            CurrentDirection = DirectionUp;
        if (moveVertical > 0)
            CurrentDirection = DirectionDown;

        Debug.Log(CurrentDirection);
        SetAnimationDirection();

        rb2D.velocity = CurrentDirection;
    }

第一个问题(重叠)的解法:

我用 transform.localScale = scale 在每个 FixedUpdate() 上改变了精灵的方向,也忘了更新比例因子,因为我添加了一个新的扩展,它将我的对象大小调整了 1更多 Unity 单位。

通过将 Collider 2D 的 Edge Radius 设置为低于 1.0f 的值(例如 0.09f) 并且 调整边界框的大小 。这将防止对象卡在边缘,因为边界框边缘现在是圆形的。