unity3d - 计算轨道路径中给定可变斜边的方向向量
问题描述
在 Unity 3D 游戏中,我试图让一个对象 (D) 围绕另一个对象 (B) 运行,并在位于被环绕对象 (A) 上方的另一个对象和环绕对象之间绘制一条射线,基本上描述了一个三角形(或圆锥,给定时间+轨道速度):
物体通过一些不相关的代码符合丘陵地形(在轨道上从高度 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
为轴参数尝试了各种向量。
解决方案
推荐阅读
- android - 单击主屏幕小部件
- php - 检查用户是否在地理围栏(位置边界)内
- javascript - JavaScript - 使用 Webpack 管理全局变量
- javascript - 正则表达式 - 搜索匹配特定字符串
- c# - 有没有比手动分配每个图像更有效的方法从资源文件夹中获取图像?
- php - 安装后的文件夹名称和 Joomla 组件链接
- python - 解码 JSON 字符串中的 UTF-8 编码
- sql-server - 带有 UNION 的 SQL Server 索引视图
- php - SQLSTATE[HY000] [2002] 参数无效(SQL:select * from information_sch ema.tables where table_schema = mamaput and table_name = migrations)
- css - react-jss 不缓存 css 类