Zion插件分析——ZionVR.cs

发表于2016-10-31
评论1 1.1k浏览
导语 
        ZionVR类以单例形式存在,项目中的其他类会通过Zion.ZionVR,instance得到它的引用。

ZionVR.cs
        ZionVR类实现了System.IDisposable接口。C#和Java一样,在内存管理这方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工作,如果希望手动释放非托管资源,就可以实现该接口。
ZionVR类以单例形式存在,项目中的其他类会通过Zion.ZionVR,instance得到它的引用。它的主要功能是,通过调用底层的OVRPlugin、OpenVR、等,判断当前连接设备的类型(Oculus、暴风魔镜、SteamVR等),然后提供接口,根据设备类型,实例化相应平台的Camera,Tracker,Controller等等。
       ZionVR类的另一作用是保存一些与VR有关的全局参数,供其他类使用。


字段
  • _enabled:是否禁用
  • renderManually:是否需要手动渲染
  • monoscopic:是否只生成单眼图像
  • sceneWidth:场景的宽
  • sceneHeight:场景的高
  • aspect:宽度比
  • fieldOfView:视场角(应该从VR设备中取出)
  • _useNativeVRSupport:是否使用Unity的VR支持
  • supportTrackedController:是否支持跟踪控制器
  • needCompanionWindow:是否需要伴随窗口(同步头盔画面,在PC端显示)
  • poseType:姿态类型,默认为坐式

属性
  • active:当前脚本是否为null
  • enabled:如果_enabled为false,则释放资源
  • eyes:两只眼睛的偏移
  • instance:单例
  • useNativeVRSupport:是否使用Unity的VR支持
  • vrType:底层VR设备的类型
注: 目前支持的VR平台类型
1
2
3
4
5
6
7
8
public enum EVRType
{
    None = 0,
    SteamVR = 1,// HTC Vive
    Oculus = 2,// Oculus
    Mojing = 3,// 暴风魔镜
    GearVR = 4// GearVR
}

方法
ZionVR()
          构造方法,获取底层VR设备类型,为vrType赋值;初始化eyes数组,长度为2。

~ZionVR()
        析构方法,与构造方法对应,在对象的生命周期结束时,隐式地对对象的基类调用Finalize()方法,释放非托管资源,可以看到,析构函数中调用Dispose(bool disposing)时传入的是false,该方法就知道只需要释放非托管资源。

Dispose()
用于显式地释放资源,调用Dispose(bool disposing)时传入的是true,并且
1
System.GC.SuppressFinalize(this);

阻止对象调用Finalize()。
Dispose(bool disposing)
      将_instance置为null,并根据设备的种类,进行各自对应的资源释放。

CreateInstance()
       静态方法,实例化对象。

SafeDispose()
      静态方法。安全释放资源,其实就是判断_instance不为null后再调用Dispose()方法而已。

DetectVRType()
       返回EVRType。
       通过调用底层的OVRPlugin、OpenVR的设备检测连接方法,判断当前连接设备的类型,传给字段vrType。在实例化其他组件之前,必须要先进行设备检测,不然插件不知道该初始化哪种设备的组件。

Setup()
       先根据vrType,创建当前连接设备的ZionSetting,然后调用其Setup()方法,对环境进行一些设置,在ZionVR.cs中体现为相关字段的赋值,如场景的宽高,视场角等。
       其他Create开头的方法
       均为静态方法,根据设备类型,实例化各自平台的相机,设置,手柄,追踪器等等。返回其基类。


    看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?
  福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!
腾讯GAD游戏程序交流群:484290331

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引