0

这是一张图片(我不能发布)显示我将在我的 XNA 游戏中做什么,我想检查玩家是否在区域范围内,如果是,则攻击玩家,我尝试使用检查射线来做到这一点,但它是奇怪并给出空结果,因为玩家必须在敌人面前才能被发现!![在此处输入图像描述][1]

if (enemyRay.Intersects(cci.CharacterController.Body.CollisionInformation.BoundingBox) <= 200)
        {
            RunController(dwarfAnimatior, dwarfwalk);
            dwarfChrachterController.Body.ApplyImpulse(dwarfChrachterController.Body.OrientationMatrix.Forward,
              Vector3.Normalize(enemyRay.Direction) * 50.0f);
            if (enemyRay.Intersects(cci.CharacterController.Body.CollisionInformation.BoundingBox) <= 50)
            {
                sound.playAh();
            }
        }
4

1 回答 1

0

你需要做两件事:

  1. 检查玩家位置和敌人位置之间的距离。

  2. 检查玩家和敌人之间的线与指向玩家视线方向的线所成的角度是否小于 180 度。

第一个很简单:

bool isCloseEnoughToAttack = Vector.Magnitude( Math.abs(player.position - enemy.position) ) < distanceToStartAttacking

第二个稍微复杂一些。只要您不需要特别注意“玩家前面”的含义,您可以通过检查点积大于 0 来相当容易地检查角度是否在后面:

bool isInFrontOfPlayer = Vector.DotProduct(Vector.Normalize(player.position - enemy.position), player.lookAtDirection) > 0 

注意 - 此代码是伪代码,我不知道您的变量/库的确切命名;但它应该非常相似。

于 2013-10-23T11:03:56.823 回答