目录
配套资源
第1章VR游戏开发引擎的选择
1.1主流VR游戏开发引擎简介
1.1.1Unity
1.1.2Unreal Engine
1.1.3CryEngine
1.1.4Cocos Creator
1.2主流VR游戏应用市场简介
1.2.1Oculus Quest
1.2.2Oculus Rift
1.2.3Steam
1.2.4PICO
1.2.5SIDEQUEST
1.3为何选择Unity作为VR开发引擎
1.3.1Unity更适合VR开发入门学习
1.3.2不可忽视的其他VR开发引擎
第2章VR项目环境准备
2.1硬件准备
2.1.1关于计算机
2.1.2关于VR头盔产品
2.2下载Unity
2.2.1安装Unity Hub
2.2.2安装合适版本的Unity编辑器
2.2.3获取Unity编辑器的使用许可证
2.2.4关于Unity编辑器的版本号
2.2.5Unity项目模板
2.2.6新建Unity项目
2.3认识Unity编辑器
2.3.1窗口内常用面板介绍
2.3.2窗口布局
2.4VR基本场景构建
2.4.1新建场景
2.4.2在默认场景中创建地面对象
2.5VR项目设置
2.5.1连接计算机
2.5.2追踪头盔
2.5.3安装Unity XR开发工具包
第3章基本VR场景设置
3.1XR Rig的引入和设置
3.1.1新建XR Rig对象
3.1.2XR Origin对象的属性
3.1.3测试和总结
3.2控制器对象的引入和设置
3.2.1构建控制器对象
3.2.2引入输入映射文件
3.2.3测试和总结
3.3手的基本呈现
3.3.1导入手部模型
3.3.2Material和Shader
3.3.3手部模型的动画组件
3.3.4更换手部模型皮肤
3.3.5测试和总结
第4章输入设置
4.1捕捉控制器输入
4.1.1第1个自定义脚本
4.1.2获得控制器按键输入
4.1.3Debug()方法
4.1.4Oculus控制器按键
4.1.5测试和总结
4.2关联控制器输入与手部动画
4.2.1实现左手的捏合动作
4.2.2实现左手的握拳动作
4.2.3实现右手的捏合和握拳动作
4.2.4总结
第5章主体运动
5.1连续移动
5.1.1连续移动与传送移动的比较
5.1.2配置连续移动
5.1.3避免主体坠落
5.1.4测试和总结
5.2转向运动
5.2.1VR游戏中常见的转向方式
5.2.2配置平滑转向和分段转向
5.2.3测试和总结
5.3使Character Controller跟随XR Rig移动
5.3.1认识角色控制器
5.3.2使Character Controller跟随主体移动
5.3.3测试和总结
5.4传送移动时指示射线的呈现
5.4.1认识指示射线
5.4.2配置指示射线对象
5.4.3测试和总结
5.5实现指定区域内的传送移动
5.5.1配置Teleportation Provider组件
5.5.2两种传送移动
5.5.3配置传送区域
5.5.4消除按键冲突
5.5.5测试和总结
5.6实现指定目标锚点的传送移动
5.6.1创建锚点
5.6.2创建透明材质
5.6.3完善锚点组件配置
5.6.4指定每个锚点的主体移动后朝向
5.6.5测试和总结
5.7自定义Ray的外观
5.7.1设置射线的线性
5.7.2自定义射线落点的样式
5.7.3测试和总结
5.8使传送指示射线只在传送时出现
5.8.1控制传送指示射线的显隐
5.8.2配置自定义脚本组件ActivateTeleportationRay
5.8.3测试和总结
第6章物体互动
6.1基本互动设定
6.1.1实现物体互动的两类组件
6.1.2配置Interactor组件
6.1.3配置可交互对象
6.1.4测试和总结
6.2抓取物体
6.2.1配置可抓取对象
6.2.2Unity常用快捷键
6.2.3GrabInteractable组件属性设置
6.2.4测试和总结
6.3自定义物品抓取位置
6.3.1导入手枪模型资源
6.3.2使手枪模型可交互
6.3.3设定合适的手枪抓握位置
6.3.4测试和总结
6.4抓取手枪时实现发射子弹
6.4.1编写发射子弹的功能脚本
6.4.2创建子弹预制件
6.4.3指定子弹的出现位置
6.4.4关联事件和脚本
6.4.5测试和总结
6.5解决发射子弹与传送移动的按键冲突
6.5.1解决按键冲突的方法
6.5.2细化传送移动指示射线的出现条件
6.5.3测试和总结
6.6如何避免交互器(Interactor)与互动对象的碰撞
6.6.1解决非预期碰撞的方法
6.6.2配置Layer
6.6.3测试和总结
6.7修正左手握枪位置
6.7.1创建继承XR Grab Interactable所有功能的自定义脚本
6.7.2配置Tag
6.7.3追加判断左右手逻辑
6.7.4快速创建手枪的左手抓握点
6.7.5解决首次握枪错位的问题
6.7.6测试和总结
6.8实现动态抓取物体
6.8.1快速实现动态抓握
6.8.2自定义脚本实现动态抓取
6.8.3测试和总结
6.9远距离抓取对象
6.9.1创建Ray Interactor对象
6.9.2配置左右手Ray Interactor的Tag
6.9.3测试和总结
6.10射线的基本美化
6.10.1优化指示射线的显隐
6.10.2优化指示射线的粗细和有效距离
6.10.3测试和总结
6.11解决动态互动与远程抓取的冲突问题
6.11.1细分动态互动与远程抓取的作用场景
6.11.2测试和总结
6.12解决不同Interactor交互时的干涉问题
6.12.1认识交互层属性
6.12.2配置交互层
6.12.3测试和总结
6.13成功抓取可互动对象时不再呈现指示射线
6.13.1新建自定义脚本ActivateGrabRay
6.13.2配置脚本ActivateGrabRay组件的属性
6.13.3测试和总结
第7章UI互动
7.1设置Canvas
7.1.1认识Canvas
7.1.2使Canvas进入VR空间
7.1.3测试和总结
7.2初步实现与UI元素的互动
7.2.1让Canvas具备VR空间内的互动能力
7.2.2修改Event System对象
7.2.3测试和总结
7.3如何消除传送移动与UI互动同时发生的冲突问题
7.3.1修改Activate Teleportation Ray脚本
7.3.2关联公共变量
7.3.3测试和总结
7.4如何阻止传送移动的Ray Interactor与UI元素互动
7.5通过下拉列表实现切换转向模式
7.5.1设置下拉列表
7.5.2编写控制转向模式的自定义脚本
7.5.3测试和总结
7.6通过控制器按钮呼出菜单
7.6.1创建菜单
7.6.2编写呼出菜单的功能脚本
7.6.3测试和总结
7.7优化Menu
7.7.1默认隐藏菜单
7.7.2根据玩家位置计算菜单出现位置
7.7.3测试和总结
7.8动态调整Menu的展现朝向
7.8.1追加调整菜单朝向的逻辑
7.8.2测试和总结
第8章震动反馈
8.1简单设置震动反馈
8.1.1认识震动反馈
8.1.2快速实现简单的震动反馈
8.1.3测试和总结
8.2精细控制震动反馈
8.2.1取消默认的震动反馈设置
8.2.2编写自定义震动反馈脚本
8.2.3测试和总结
8.3震动反馈控制脚本泛用化改造
8.3.1功能通用化的改造思路
8.3.2通用化改造震动反馈脚本
8.3.3测试和总结
第9章自定义手势动画
9.1冻结手势动画
9.1.1创建用于存储手势的脚本
9.1.2关联所有手指关节对象
9.1.3手动调整握枪手势
9.1.4创建冻结手势动画的脚本
9.1.5测试和总结
9.2自定义手部姿势
9.2.1指定动画冻结时的手势
9.2.2测试和总结
9.3解决缩放导致的手部模型位置偏移问题
9.3.1改变Hierarchy结构
9.3.2根据缩放倍数修改GrabHandPose脚本
9.3.3测试和总结
9.4放开物体后如何还原手部姿势
9.4.1在GrabHandPose脚本中补充松手后的逻辑
9.4.2测试和总结
9.5手势的自然过渡
9.5.1补充插值法逻辑
9.5.2认识Lerp函数
9.5.3使插值法函数生效
9.5.4测试和总结
9.6将动画过渡逻辑应用到左手
9.6.1配置左手模型对象
9.6.2在GrabHandPose脚本中补充左手模型对象
9.6.3测试和总结
9.7让左手自动获得合适的位置和方向
9.7.1“单一真相”原则
9.7.2创建自定义Unity编辑器菜单
9.7.3认识增量开发
9.7.4测试和总结
第10章晕动优化
10.1隧道效应
10.1.1隧道效应减缓晕动的原理
10.1.2将隧道效应应用到VR视野
10.1.3设置隧道效应的效果和作用场景
10.1.4测试和总结
10.2自由扩展隧道效应的应用场景
10.2.1设置新场景下的隧道效应
10.2.2测试和总结
10.3传送移动中应用隧道效应
10.3.1设置传送移动场景下的隧道效应
10.3.2使传送移动场景下的隧道效应可见
10.3.3测试和总结
第11章项目打包与发布
11.1将项目打包成APK
11.1.1打包测试的适用场景
11.1.2打包APK的一般项目设置
11.2URP项目打包步骤
11.2.1URP管线的优点
11.2.2URP管线项目的打包设置
11.3主流VR应用市场平台
11.4在Oculus Quest上发布应用
11.5在PICO平台发布应用