在VR虚拟场景的物理实验室模块中,我想做一个切割磁感线发电机的模拟装置;为了让用户更加真实的操作设备,让用户通过手柄的旋转手势,实现转盘的同步转动。
(之后补gif图)
原理,获取到需要转动的物体中心的位置,记录鼠标按下的瞬间的位置,按下后计算每帧的鼠标移动的位置,通过这三个位置,计算角度,(即鼠标按下时与物体中心的连线 和 每一帧鼠标位置与物体中心的连线的夹角)。
通过四元数判断旋转的方向的,通过 transform.localEluerAngles方法,控制物体旋转。
modelPos = ca.WorldToScreenPoint(target1.transform.position);
坐标系转换,从世界坐标系到屏幕位置转换(屏幕位置以像素定义,左下为0,0;z的位置是以世界坐标系衡量的到相机的距离)。括号里加三维向量。
详见Unity3D中Camera类的方法。
static function Angle (from : Vector3, to : Vector3) : float
RotateAngle = Vector3.Angle (preMousePos - modelPos, mousePos - mo