我正在做一个游戏,它有一个跟随样条的目标点。对于我正在进行的转向目标的人工智能,我需要知道目标是在车辆前面的左边还是右边。我该如何完成这件事。(我不需要特定的数字,只需要一个函数返回的布尔值就可以了)。Bellow在某种程度上是一种可视化。

由于这是车辆的人工智能,车辆的旋转可以是任何旋转或任何位置,所以正坐标和负坐标不会真正起作用。如果你们知道如何实现这一点,我将非常感激。
发布于 2021-01-20 00:44:30
选项1:使用cross product。
Vector3 delta = (targetPoint - vehiclePosition).normalized;
Vector3 cross = Vector3.Cross(delta, vehicleForward);
if (cross == Vector3.zero) {
// Target is straight ahead
} else if (cross.y > 0) {
// Target is to the right
} else {
// Target is to the left
}这样做的一个主要好处是,叉积的结果是您需要旋转才能到达目标的轴!然后,您可以使用此命令进行旋转:
float angle = Vector3.AngleBetween(vehicleForward, delta);
angle = Mathf.Min(angle, maxTurnSpeed);
transform.Rotate(angle * Time.deltaTime, cross);如果要限制Y轴/地平面的旋转,可能需要将"delta“和"vehicleForward”的Y值设置为零。
选项2:使用车辆的变换将点变换到局部空间。
Vector3 localPos = vehicle.transform.InverseTransformPoint(targetPoint);
if (localPos.x > 0) {
// Target is to the left
} else if (localPos.x < 0) {
// Target is to the right
} else if (localPos.z > 0) {
// Target is in front
} else {
// Target is behind
} 发布于 2021-01-20 03:12:47
谢谢,我只是忘了在我的问题中添加一些代码。事实证明,我错误地使用了Vector3.Cross函数,因为没有为该函数中的参数输入正确的值。谢谢大家和Kalle Halvarsson认识到我的错误。
https://stackoverflow.com/questions/65794490
复制相似问题