从一个物体到另一个物体的侧面进行射线投射

时间:2018-11-05 10:31:13

标签: c# unity3d

我有一个AI(红色圆圈),应该向我的玩家射击(蓝色圆圈)。

当前我正在使用普通的Raycast:

Ray ray = new Ray(transform.position, transform.forward);

这给了我紫色的线。

现在,当有一个角落(如图像上所示)时,它不会撞到玩家,但是如果向侧面射击的话,它可能会击中。

我已经看到了通过在光线投射中添加角度来解决此问题的方法,但是这对我来说不起作用,因为如果玩家靠近或远离AI,角度是不同的。

我需要的是:

ai会从自身向玩家的侧面(左右)射击射线,但我不知道该怎么做。

enter image description here

2 个答案:

答案 0 :(得分:0)

您会找到很好的答案HERE

或者在此时使用Sphere RaycastContact Point并射击。

答案 1 :(得分:0)

您的玩家肯定有某种半径,不是吗? 只需使用玩家与射击AI之间的距离,玩家的半径和一些不错的三角函数,您就应该能够生成两条光线,以测试射击AI是否看到玩家的“右侧”以及他的“左侧” “。

Vector3 direction = player.transform.position - shootingAI.transform.position;
float distance = direction.magnitude;
float playerRadius = player.radius;// this is a variable you need to set
float angleToRotate = Mathf.Atan(radius/distance); // trigonometry: tan(angle)=oppositeSideLength/adjacentSideLength

Vector3 rayDirection1 = Quaternion.Euler(0f, -angleToRotate, 0f) * direction;
Vector3 rayDirection2 = Quaternion.Euler(0f, angleToRotate, 0f) * direction;

使用这两条射线作为方向,您应该测试“右侧”和“左侧”