这里有一张图片(我不能发布)显示我将要在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();
}
}
答案 0 :(得分:0)
你需要做两件事:
检查玩家位置与敌人之间的距离 位置。
检查玩家与敌人之间的线所形成的角度。 指向玩家视线方向的线条小于 180degrees。
第一个很简单:
bool isCloseEnoughToAttack = Vector.Magnitude( Math.abs(player.position - enemy.position) ) < distanceToStartAttacking
第二个稍微复杂一些。只要您不需要特别关注“玩家前方”的含义,您可以通过检查Dot Product是否大于0来相当容易地检查角度是否落后:
bool isInFrontOfPlayer = Vector.DotProduct(Vector.Normalize(player.position - enemy.position), player.lookAtDirection) > 0
注意 - 这段代码是psudeocode,我不知道你的变量/库的确切命名;但它应该非常相似。