编写陀螺仪控制器的Unity教程 VR开发资源

manew_JR 2017-07-19 16:24:48
陀螺仪为开发者提供了各种各样令人兴奋的控制变化。但当涉及到相机控制器的集成和实现时,会发生很多奇怪和神奇的事情。开发人员必须处理不同的设备导向,初始相机位置,当然还有四元数。我很高兴分享我的经验,并描述我们如何在Heyworks中解决这些问题。希望这能帮助那些第一次使用陀螺仪的人减轻工作和辛苦。
 
 
在我的例子中,我想演示如何在摄像机控制器中实现以下功能:
 
  • 设备的屏幕被认为是进入虚拟世界的窗口,因此,围绕用户的设备必须重视它。
  • 它将支持自动旋转,并在每个设备方向上工作。
  • 你将能够从相机中分离控制器,通过代码改变它的旋转和位置(例如播放相机动画),然后附加控制器。
  • 它将使虚拟世界与真实世界的轴线平行,并将重新校准水平旋转。
 
我们解决的第一个问题是在iOS设备和中,使用不同坐标系统引用类型: left-handed and right-handed。为了将四元数从一个系统转换到另一个系统,让我们使用以下函数:
 
1
2
3
private static Quaternion ConvertRotation(Quaternion q)
{
    return new Quaternion(q.x, q.y, -q.z, -q.w);
}
现在我们可以用下面的代码来计算相机的旋转:
 
transform.rotation = ConvertRotation(Input.gyro.attitude);
另一个需要处理的问题是支持不同的方向(由Unity开发人员在内部解决),由以下修改后的代码为每个方向确定:
 
01
02
03
04
05
06
07
08
09
10
11
12
private Quaternion GetRotFix()
{
    if (Screen.orientation == ScreenOrientation.Portrait)
        return Quaternion.identity;
    if (Screen.orientation == ScreenOrientation.LandscapeLeft
    || Screen.orientation == ScreenOrientation.Landscape)
        return Quaternion.Euler(0, 0, -90);
    if (Screen.orientation == ScreenOrientation.LandscapeRight)
        return Quaternion.Euler(0, 0, 90);
    if (Screen.orientation == ScreenOrientation.PortraitUpsideDown)
        return Quaternion.Euler(0, 0, 180);
    return Quaternion.identity;
}
下面是新增的函数来计算相机的旋转:
 
transform.rotation = ConvertRotation(Input.gyro.attitude) * GetRotFix();
控制器应更新与基装置旋转相关的摄像机旋转,并在水平面上重置基相机旋转。这意味着,如果用户启动将设备指向北方的应用程序,游戏摄像机将不会旋转到虚拟的北方。摄像机将显示给定的方向。下面是考虑相机基旋转和设备基旋转的新功能。
 
transform.rotation = cameraBase * ( ConvertRotation(referenceRotation * Input.gyro.attitude) * GetRotFix();
 
对cameraBase和参数Rotation的计算有一点棘手。主要的两个障碍是:
 
  • 你必须考虑到当前的设备方向,同时计算参数Rotation
  • 你必须考虑在计算cameraBase时只围绕轴线旋转
 
在附件示例中可以找到确切的函数。
最后一件事,平滑相机旋转:
 
1
transform.rotation = Quaternion.Slerp(transform.rotation, cameraBase *
( ConvertRotation(referanceRotation * Input.gyro.attitude) * GetRotFix()), lowPassFilterFactor);
现在我们添加两个函数,AttachGyro和DetachGyro。第一个将启用控制器并重新计算所有的基旋转,第二个将禁用控制器。
最后我们的控制器准备好了。请在附件中找到工作示例。我将非常感谢您的评论和问题。希望,你会发现这个帖子有用!
 
99VR视界二维码
热门推荐
Hot Recommended
在线客服