制作一个能够跟随物体的滑块
想要的效果:
需求分析:
- 我们想要这个滑块跟随这个球移动
- 自身被限制在这轨道上
- 不能让滑块离开这个轨道,而且还要跟随这个球
用的算法来实现这个需求
这相当于已知ABC三个点的坐标,求C点垂直于AB之间的坐标,也就是D点的坐标
我们需要先得到AB两点的向量:
Vector3 vectorAB = mPointB - mPointA;
然后计算C点在AB两点之间的长度
float dotProduct = vectorAB.x * (mPointC.x - mPointA.x) + vectorAB.y * (mPointA.z - mPointA.y) + vectorAB.z * (mPointC.z - mPointA.z);
float lengthSquared = vectorAB.x * vectorAB.x + vectorAB.y * vectorAB.y + vectorAB.z * vectorAB.z;
限制不能超过两点之外
if (dotProduct > lengthSquared) dotProduct = lengthSquared; if (dotProduct < 0) dotProduct = 0;
映射计算位置
mPointA + vectorAB * dotProduct / lengthSquared;
实现的效果:
我们得到了我们想要的效果!
Demo下载地址