首页 > 解决方案 > 应用高速跟随一个目标时忽略 Unity 2D 碰撞

问题描述

我的游戏基本上是关于跟随鼠标位置并且每个都有组件的多个玩家对象,CircleCollider但是当玩家彼此如此接近时,他们不会发生碰撞并开始重合。

有没有办法GameObject在每个玩家面前进行检测,使其速度为零,如果玩家视线空旷,它可以直线前进?

我认为这可以通过在玩家的向上向量中获取第一个接触并比较GameObject然后的标签来实现,如果它是Player自我速度设置为零。

标签: unity3d2d

解决方案


假设您的对象使用该RigidBody2D组件,您可以尝试将碰撞检测模式从“离散”更改为“连续”。

要阻止对象相互推动,请将此代码放在移动对象的代码之前:

    Vector2 difference = target - (Vector2)transform.position;
    RaycastHit2D[] hit = new RaycastHit2D[1];
    if (Physics2D.CircleCast(transform.position, radius, difference.normalized, new ContactFilter2D(), hit, difference.magnitude) > 0) {
        // Something is in the way
        float firstObstacleDistance = hit[0].distance;
        target = difference.normalized * firstObstacleDistance;
    }

变量target应该是鼠标位置,radiusCircleCollider组件的半径。


推荐阅读