发现自己想复杂了,有更简单的实现:
https://blog.csdn.net/ithot/article/details/125135656
游戏数学: 计算射线与平面的交点(上帝视角)
应用场景
上帝视角,点击屏幕,需要计算此时点中的平面上的位置,比如将物体移到点击的位置上,或者需要拖拽物体移动
数学计算
在这里,实际上是有几个前提的计算,或者说是简化版的射线与平面的交点
因为是上帝视角,所以射线的起点的y轴坐标一定为正,与y轴的夹角一定为锐角,且我们使用xy轴组成的平面作为交点计算的平面
我们假设射线起点为A点(ax, ay, az),与xy轴平面相交点为B点(bx, 0, bz),A点在xy轴平面的投影点为C点(ax, 0, az),我们的目标是要求解出B点的位置,A点位置已知,因此C点位置也是已知,我们可以以C点为原点重新建立坐标系,只需求解出向量CB,就可以求解出B点,射线方向已知,我们可以通过三角函数求出AB段的长度,由此求出AB向量,将其y轴置为0即可求得CB向量
或者假设原点为O
则有OB + BC = OC
则OB = OC - BC = OC + CB
故有求解公式如下:
AC长度 = ay
AB长度 = ay / cos(射线方向 与 AC向量的夹角)
AB向量 = 射线方向 * AB长度 = (abx, aby, abz)
CB向量 = (abx, 0, abz)
C点 = (ax, 0, az)
B点 = (ax + abx, 0, az + abz)
在Unity中的示例
我们在Unity中完成这一计算的验证
using System.Collections;