代码之家  ›  专栏  ›  技术社区  ›  SpoocyCrep

僵尸在行走时会从地面坠落

  •  0
  • SpoocyCrep  · 技术社区  · 7 年前

    我有一个非常奇怪的问题,我为我的游戏在Unity中创建了自定义的mob a i(它有程序生成的体素世界,所以代理没有很好地工作)。我在移动的暴徒身上使用僵尸。

    但我有一个问题,暴徒在移动时进入地板(站着时不会发生),当他们站着时,他们会传送回来!不是动画,我禁用了动画,但它仍然会发生。

    以下是我如何移动它们:

       private void WalkToTarget()
    {
        if (goal != Vector3.zero)
        {
            if (goal.y <= 5)
            {
                currentstatus = MOBSTATUS.STANDING;
                return;
            }
            var distance = Vector3.Distance(VoxelPlayPlayer.instance.transform.position, gameObject.transform.position);
            if (distance < 15)
            {
                goal = VoxelPlayPlayer.instance.transform.position;
                goal.y = VoxelPlayEnvironment.instance.GetHeight(goal);
            }
            if (distance < 5)
            {
                this.currentstatus = MOBSTATUS.ATTACKING;
            }
            //MOVEMENT HAPPENS HERE
            Vector3 direction = (goal - mobcontroller.transform.position).normalized*2f;
            if(mobcontroller.collisionFlags!=CollisionFlags.CollidedBelow)
            direction+= Vector3.down;
            mobcontroller.Move(direction * Time.fixedDeltaTime);
            RotateTowards(direction);
        }
    }
    

    编辑:

    所有代码: https://pastebin.com/khCmfKGi

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ruzihm aks786    7 年前

    你的部分问题是你在使用 CollisionFlags 不正确。

    而不是这个:

    if(mobcontroller.collisionFlags!=CollisionFlags.CollidedBelow)
    

    你得这么做

    if(mobcontroller.collisionFlags & CollisionFlags.CollidedBelow)
    

    因为你想检查暴徒是不是 至少 在下面碰撞,如果暴徒 只有 在下面碰撞。

    即便如此, CharacterController.Move 不应该让你通过碰撞机 独自一人 .

    我怀疑,在某些情况下,向(方向)旋转可能是通过地面旋转MOB对撞机的边界。为了防止这种情况发生,我建议创建一个lookdirection,以便在进行旋转时保持角色旋转平缓:

    Vector3 direction = (goal - mobcontroller.transform.position).normalized*2f;
    if(mobcontroller.collisionFlags & CollisionFlags.CollidedBelow)
        direction+= Vector3.down;
    mobcontroller.Move(direction * Time.fixedDeltaTime);
    
    Vector3 lookDirection = (goal - mobController.transform.position);
    lookDirection.y = mobController.transform.y;
    RotateTowards(lookDirection);
    
        2
  •  0
  •   Ruzihm aks786    7 年前

    使用时出现此问题 Rigidbody CharacterController 在暴徒身上去除 刚体 群众解决了这个问题。