【问题标题】:Check if object is within FOV (field of view) in Unity 3d检查对象是否在 Unity 3d 中的 FOV(视野)内
【发布时间】:2019-05-08 18:52:43
【问题描述】:

我正在尝试在 Unity 3d 中创建一个游戏,其中 NPC 移动并环顾四周并检查哪些对象在他们的视角内。要计算视野角内的对象,我使用统一的内置函数 Vector3.Angle,请参阅:

// Get current position of the Robot.
var robotObjectPosition = currentTransform.parent.position;

// Get the direction to the object
var directionToObject = (objectToFind.transform.position - robotObjectPosition) / 2;

// Calculate the angle to the object and check if it's inside our viewAngle.
var isInsideAngle = Vector3.Angle(currentTransform.forward, directionToObject) < viewAngle / 2;

现在我有一个奇怪的问题,如果我靠近一个物体(在这种情况下是一个球门线形状的平面),上面的检查返回 false,即使该物体仍然在它前面并且球门线仍然清晰地在他的视野之内。我做了一个截图来可视化我的问题。 在第一幅图像中,球门线在他的视野内,但在第二幅图像中(我将他向前移动了一小步),尽管我可以清楚地看到他仍然在物体前面,但上述函数返回 false。我猜它与另一个对象的宽度有关(因为我将视角除以 2)但我无法找到解决方法。

主要是我想了解这里发生了什么。

【问题讨论】:

    标签: c# unity3d artificial-intelligence game-development


    【解决方案1】:

    我自己尝试了您的代码并得到了相同的结果。问题是您需要记住,您计算的角度有两个重要特征: 1.它检查“objectToFind”的中心/枢轴点。一旦中心不在角度内,您将得到错误。 2. 它是 3D 而不是 2D,所以如果你靠近机器人和物体之间的角度(在 Y 轴上)不包括 objectToFind 的中心。

    作为一种解决方案,我会投射光线而不是检查它是否在角度范围内。 希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-27
      • 2015-06-27
      • 2019-11-05
      • 1970-01-01
      • 2021-03-30
      • 2020-01-15
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多