在这一节,我介绍的主要内容有

  • [CameraRig]预制体
  • [SteamVR]预制体
  • [Status]预制体

在SteamVR插件的Prefabs文件夹下面有三个预制体,CameraRig是相机预制体,使用时直接将这个预制相机作为主相机拖入场景中,我们就能以第一人称看到VR头盔里面的内容。Status是通过overlay显示一些状态信息的预制体。SteamVR是渲染核心预制体,不需要手动添加,会自动创建。下面我就来详细讲解这三个预制体。

[Camerarig]

<div align="center">![这里写图片描述](https://img-blog.csdn.net/20160926164717530)</div>

我们可以看到,在Camerarig下面有一个左右手柄的Controller和一个头部的Camera

在手柄Controller和头部的Camera上都有一个Steam VR_Tracked Object脚本,这是用来跟踪设备位置的脚本。

void OnEnable(){var render = SteamVR_Render.instance;if (render == null){enabled = false;return;}SteamVR_Utils.Event.Listen("new_poses", OnNewPoses); //监听new_poses通知}

我们在前面分析SteamVR渲染脚本SteamVR_Render时提到过在渲染循环里面有不断获取设备位置,并发送通知的逻辑,SteamVR_Utils.Event.Send(“new_poses”, poses),可以看到在Steam VR_Tracked脚本里面有注册这个监听,所以这个脚本可以不断的获取设备位置,同时更新在显示画面中的位置。我们在来看看OnNewPoses这个方法

private void OnNewPoses(params object[] args){if (index == EIndex.None)   //设备的索引,头显默认为0return;var i = (int)index;isValid = false;var poses = (Valve.VR.TrackedDevicePose_t[])args[0];if (poses.Length <= i)return;if (!poses[i].bDeviceIsConnected)return;if (!poses[i].bPoseIsValid)return;isValid = true;var pose = new SteamVR_Utils.RigidTransform(poses[i].mDeviceToAbsoluteTracking);if (origin != null){pose = new SteamVR_Utils.RigidTransform(origin) * pose;pose.pos.x *= origin.localScale.x;pose.pos.y *= origin.localScale.y;pose.pos.z *= origin.localScale.z;transform.position = pose.pos;transform.rotation = pose.rot;}else{transform.localPosition = pose.pos;transform.localRotation = pose.rot;}}

OnNewPoses的方法就是设置设备的transform,使得设备的实际空间中的位置与在头显画面中看到的位置一致。
Camera上面还有一些脚本,SteamVR_Camera.csSteamVR_CameraFlip.cs这两个脚本作用都是对相机渲染出来的图像进行一定的处理变换。SteamVR_GameView.cs是用来显示运行VR时pc上面的伴随窗口的。这里面的代码都不是太复杂,就不一一介绍了。

[SteamVR]

在SteamVR这个预制体只有Stean VR_Render这一个脚本,这个脚本在之前已经介绍了。这个预制体是必须在项目中添加的,即使不手动添加也会自动添加。
Pause Game When Dashboard Is Visible参数控制是否在显示控制面板时暂停游戏(在游戏过程中按系统键就会弹出控制面板),实际做法是将Unity的Time.timeScale设为0,相当于时间暂停了。
Lock Physical Update Rate To Render Frequency参数锁定物理更新频率为(头显)渲染帧率。这个会根据头显的渲染帧率来计算Unity的更新频率。
External Camera为外部相机,它的作用是制作那种将玩家的现实场景与虚拟的游戏场景融合的视频。
Tracking Space为跟踪空间的类型,可以设为坐姿和站姿,坐姿和站姿的区别是视角的高度。

[status]

status预制体的用处并不是很大,它的下面有6个组件,我来分别说一说这6个组件的作用

Calibration:这个组件用在Vive进行房间设置时进行相应的提示

_Stats:这个是显示统计信息的一个组件(目前仅显示帧率和丢帧数)。它上面还有一个Camera,通过它将GUIText渲染到overlay的纹理上,通过overlay将文字信息显示出来。它的显示效果如下图

TrackingLost:这个是失去头显定位后给的文字提示

TrackingRestored:这个是恢复头显定位后的提示信息

SteamInitFailure:这个是Steam初始化失败后的文字提示

Overlay:这个控件的作用是是一个2D的UI界面叠加到场景上面显示出来

HTC VIVE开发教程(三)相关推荐

  1. HTC VIVE开发教程(五)

    前面几节我们了解了SteamVR的基本原理,现在可以进行实战开发了.但在进行VR开发前,我还要先介绍一套强大的VR开发工具--VRTK 在进行VIVE开发时,我们经常要用手柄进行一些操作,比如监听按键 ...

  2. HTC VIVE开发教程(一)

    在这一节,我介绍的主要内容有 HTC VIVE的安装与入门 VIVE插件的结构目录 学习VR有一段时间了,在这段时间里我对HTC的vive还有Oculcus都进行过一定的研究,也开发出了几款VR项目, ...

  3. HTC VIVE开发教程(四)

    从这一节起我开始介绍一些vive的交互实现方式,比如手柄发出的射线,凝视,瞬移等等.SteamVR插件内都有这三种交互的辅助类. Extras文件夹里面的SteamVR_GazeTracker是凝视的 ...

  4. HTC VIVE开发教程(二)

    这一节我介绍的主要内容有 SteamVR渲染机制 用Unity做游戏开发的核心之一就是图形渲染,做VR开发当然也是一样,在这一节,我们就来看看SteamVR的图形渲染原理.SteamVR_Render ...

  5. HTC VIVE开发实例教程-邵伟-专题视频课程

    HTC VIVE开发实例教程-1971人已学习 课程介绍         HTC VIVE开发实例视频培训教程,我们相信学习VR技术与学习任何其它技术具有相通性,通过一定的刻意练习,后发现一个方法论和 ...

  6. HTC Vive 开发(一)——VR环境搭建

    VR环境搭建 第一步:创建空的Unity项目,并依此导入 SteamVR 和 VRTK 插件包 (有顺序是因为VRTK是依赖于SteamVR的,顺序颠倒可能会出现error) 第二步:创建空物体并命名 ...

  7. MIP开发教程(三) 使用MIP-CLI工具调试组件

    一 . 在 mip-extensions 仓库中创建新的组件 二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发 ...

  8. unity HTC vive开发笔记二

    今天来介绍 HTC vive开发之操作GUI 也就是实现手柄对物体的点击 Step 1 安装好我们需要的两个插件之后 删除我们的mainCamera 加入 assets-steamvr-cameraR ...

  9. HTC Vive unity 教程【转载】

    原文:HTC Vive Tutorial for Unity 作者: Eric Van de Kerckhove 译者:kmyhy HTC Vive 是一个虚拟现实头盔,由 HTC 和 Valve 公 ...

最新文章

  1. java判断字符串的值是否为0或者为空
  2. boost::process::std_in相关的测试程序
  3. How AET fields are retrieved from backend
  4. 转-- iOS 30多个iOS常用动画,带详细注释
  5. 设计模式---适配器设计模式
  6. php网站采集器,PHP采网址(列表页处理)插件的开发方法
  7. 第六节:STM32基于HAL库的IIC通信
  8. 查看电脑的补丁以及win10如何进入dos系统
  9. 使用turtle绘图:绘制“点“:dot()绘制“标记“:stamp()
  10. sublime全解:从菜鸟到大师
  11. html+css个人简历/网页界面
  12. 扒一扒迅雷的代码结构
  13. Excel添加按键运行宏
  14. c语言赛车游戏代码大全,初学者天地游戏制作--赛车游戏的完整图
  15. QLineEdit setFocus失效问题
  16. git 修改倒数二个 commit
  17. (二十三)SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
  18. dubbo注册服务和消费服务---入门篇
  19. 产品/项目经理做好项目管理的入门指南
  20. 使用深度学习OpenCV python进行字符识别

热门文章

  1. win7网络计算机和设备,Win7电脑修改网卡配置连接千兆网络的方法是什么?
  2. 《Joint Gap Detection and Inpainting of Line Drawings》——论文阅读之line drawings
  3. mysql 查看 udf_MySQL的UDF
  4. WIN7及以上系统如何输入序列号并激活成正式版?
  5. 强到离谱!2023年必备的21款AI工具
  6. 真正从0开始用Unity3D制作类战地2玩法的类龙之谷、王者荣耀的手游(暨全平台游戏)...
  7. 游戏建模和原画哪个更适合我?5年,10年,哪个行业发展前景更好
  8. 使用DirectoryInfo  和FileInfor 类获取当前层子文件夹,和所有文件夹
  9. 云上网络规划CIDR地址划分的参考示例
  10. Android APP如何防止二次打包