【问题标题】:Unity 2D Collision Ignored When Applying High Speed Following One Target应用高速跟随一个目标时忽略 Unity 2D 碰撞
【发布时间】:2018-08-27 05:51:22
【问题描述】:

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

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

我认为这可以通过在玩家的向上向量中获取第一个联系人并比较GameObject的标签来实现,如果是Player,则将自身速度设置为零。

【问题讨论】:

  • 您的对象设置为连续物理还是离散物理?
  • @Draco18s 为什么设置为离散?

标签: unity3d 2d


【解决方案1】:

假设您的对象使用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应该是鼠标位置,radius是CircleCollider组件的半径。

【讨论】:

  • 有什么区别?
  • 我相信“离散”会检查每个 FixedUpdate 上的碰撞,但“连续”会确保检查之间的点。假设您有一个对象每秒运行 100 个单位,即每 FixedUpdate 运行 2 个单位。如果两个对象都是 1 个单位宽,那么它有可能从对象的左侧移动到对象的右侧。如果它是“连续的”,那么它将检查每个FixedUpdate 的开始和结束位置之间是否存在对象。
  • 好的,谢谢我切换到Continous模式但是还有一个问题当玩家跟随鼠标位置时,他们似乎在为达到目标而奋斗,玩家几乎不会发生碰撞有没有办法使移动变得平滑如果他们无法达到目标?我制作了一个 2D 物理材料,摩擦力 = 0。但效果并不理想。它一直滞后。
  • 希望我更新的答案中的(未经测试的)代码应该可以工作。在代码之前,target 应该设置为鼠标位置,radius 设置为圆的半径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2018-01-28
相关资源
最近更新 更多