在Unity 3D游戏中,我试图使一个对象(D)绕另一个对象(B)旋转,并在位于被绕行的对象(A)上方的另一个对象与绕行的对象之间绘制射线,本质上是描述一个三角形(或圆锥体,给定时间+轨道速度):
该对象通过一些无关的代码符合丘陵地形(随着高度B从轨道B上下移动),但是,这有时意味着它的位置比最大长度更远,例如,如果它沿着陡峭的山谷旅行或比A高的陡峭山丘。
我遇到的困难是计算到距离A的最大长度所允许的地形上最远点的向量。换句话说,在最终方向线上方的插图中,是绕A旋转的最大长度线直到它碰到了地形,这都是我所追求的,而不管地形的高度或角度如何。
我的三角学很基本,但是我认为从AC和AB的切线计算角度,然后将其四元数乘以方向矢量(c-a)可以得出与A正确的方向。这是绕行物体的代码D:
private void Update()
{
transform.RotateAround(transformB.position, Vector3.up, rotSpeed * Time.deltaTime);
if (Physics.Raycast(transform.position, -transform.up, out hit, 100))
{
float angleDeg = Mathf.Atan2(transformA.position.y,
Vector3.Distance(hit.point, transformA.position)) * Mathf.Rad2Deg;
Quaternion q = Quaternion.AngleAxis(angleDeg, Vector3.left);
Vector3 dir = q * (new Vector3(hit.point.x, transformA.position.y,
hit.point.z) - transformA.position);
Debug.DrawRay(firingTransform.position, dir, Color.green, 0.1f);
}
}
它似乎只能在一半的轨道上正常工作:
我为Quaternion.AngleAxis
轴参数尝试了各种矢量。