Unity 拖拽物体时限制其沿直线运动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37027464/article/details/80246238

在许多场景中,我们需要用到拖拽物体这个功能,有的时候我们需要拖拽的轨迹为一条直线,平稳地拖拽,但是单靠用手去拖拽是很难拖成直线的(除非你单身20年).这时我们可以将拖拽的点限定在一条直线或者向量上. 要实现这个功能只需你想要规定的那条直线或向量上的两个点,和你所拖拽的物体的坐标。思路是求出你所拖拽物体坐标对应那条直线或向量的垂点(垂足).

如图
这里写图片描述

想要物体沿着直线移动,即要物体的移动时的坐标落在直线上

物体的坐标为 Vector3 posObj
直线上端点A  Vector3 posA
直线上端点B  Vector3 posB
所求目标点C Vector3 posC

设物体为D点,

第一步

先求向量 CD :①求出D点到向量BA 的距离dis ②求出与向量BA垂直的向量right
dis与 right相乘即可得到向量CD

第二步

求出向量DA ,直接用两坐标点相减即得

第三步

CD + DA = CA , CA + posA = posC
posC就是我们要求的垂足坐标,最后

GameObject.transform.position = posC;

最后

可能会有朋友会疑问何必如此麻烦,直接限定x或者z轴坐标不就行了。如果这条直线是斜的,那么直接限定x,z坐标会变得复杂,何况动态环境下,直接计算点坐标会省事许多。当然,这只是其中一种方法。
最后,这种方法还缺最后一步完善,那就是当你的物体在已知向量的两侧时,你是需要去判别左侧或右侧的,因为使用上述方法时,最需要注意的就是向量的方向了。具体如何判别,相信聪明的你们肯定会的。

猜你喜欢

转载自blog.csdn.net/weixin_37027464/article/details/80246238