上下文
我正在使用混合现实和Unity,并尝试用我的手控制GameObject的3d旋转。
这是我到目前为止所拥有的:
Vector3 _lefthand = new Vector3(Left.x, Left.y, Left.z);
Vector3 _righthand = new Vector3(Right.x, Right.y, Right.z);
_myObject.transform.rotation = Quaternion.FromToRotation(Vector3.right, _righthand - _lefthand));
该块包含在IEnumerator
协程中,该协程在遇到if
中的Update
语句时开始。 if
检查特定的手势,因此在启用手势时旋转“开始”,而当手势不活动时“停止”。
我所进行的旋转很小就很好,但是如果我想多次旋转对象就会掉下来,因为_myObject
的旋转正好匹配当前Vector3
位置创建的当前四元数我的手。
问题
我如何才能将_myObject
从其当前旋转旋转到新的旋转,并保持双手起始位置和结束位置之间的差值呢?
答案 0 :(得分:1)
在每帧的开始处,缓存旋转和左手->右手方向,然后使用Quat B * Quat A
在世界空间中将A旋转B,或者将transform.Rotate
与{{1 }}。
Space.World
除了仅缓存开始旋转和开始指针的位置外,您可以使用此技术,但这通常会导致沿指针之间的局部轴的意外旋转。使用每帧增量会将其最小化。