摘要
对于缺少经验的新手来说如何使用Unity快速创建虚拟现实内容,本案例示范了利用流行的免费插件VRTK创建名为“Jump Start Your Car Battery”的VR项目的方法和步骤。(笔者注:案例使用Unity版本是2018.3.1)
目标
通过本案例你将学会如何:
创建场景——摆放物体,使用3D模型搭建场景。
创建交互行为(拾取,投掷)。
吸附到目标区域(当你在SDZ附近放置一个对象时,它会自动吸附到位)。
自定义触发高亮区域。
自定义高亮颜色和3D模型。
本案例所需素材
Low Poly Car
Clamp.fbx
Gooery.fbx
Deaery.fbx
Lesson Plans-VR in Unity.zip
第1课 下载示例项目并配置VRTK环境
(一)准备工作
(二)打开下载的VRTK-master项目,在Unity中检查Virtual Reality Supported是否勾选:
(三)确认Scripting Runtime Version已经设置为“.NET 4.x Equivalent”
连接好HTC VIVE套件,打开项目中的ExampleScene场景,试玩。
第2课 搭建VR场景VR Placing Assets (using VRTK)
(一)复制示例场景
(二)从资源商店导入小汽车3D模型
(三)下载/重命名Clamp(夹具)和 2 Batteries(电池)模型
(四)添加小车和电池到场景中
导航至Assets > Models > Car V1文件夹,拖到 "car_v1" 到场景中,放置到黄色箭头附近(世界坐标原点附近)。
在Inspector面板,将小车沿Y轴旋转180度。
在Hierarchy 面板, 展开 car_v1 以显示子物体。
选择其下的 hood ,在Inspector面板沿X轴旋转hood,使引擎盖打开至适合的角度(参考值-37度)。
在Hierarchy 面板对小车复制一份,分别重命名为"Good Car" 和"Dead Car"。
选择Dead Car, 使用移动工具将其移至Good Car前面,,沿Y轴旋转180度 (使两辆车面对面位于 yellow starting arrows对侧)。
将Models文件中的good battery 和dead battery模型拖到场景中,分别放置到Good Car和Dead Car的引擎中,摆好位置。
创建两个立方体,分别放置到两辆小车驾驶员后视镜附近。
(五)调整模型大小
第3课 添加可交互物体VR Interactable Objects (using VRTK)
(一)创建材质(红色材质和黑色材质)
(二)添加可交互立方体
(三)改变可交互立方体的形状为夹具(Clamp)
(四)调节夹具物体的碰撞盒
原来的碰撞盒是Box Collider,相比夹具模型而言尺寸太大了。调节该碰撞盒的尺寸和位置使之贴合夹具模型。也可以采用另一种方法,就是删除原来的Box Collider,重新添加一个Box Collider,会自动适配模型的尺寸。具体步骤省略。
(五)放置夹具(Clamps)
选择RedClamp和BlackClamp(按住Shift键并单击),然后单击鼠标右键>复制。将新的夹具组移动到另一个桌子立方体上,并在Y轴上将它们旋转-90度。
第4课 创建可触发区域VR Snap Zones (using VRTK)
(一)测试新的激活区(New Snap Zone Testing)
(二)设置SZ激活区(SZ Activation Area)
在 Hierarchy面板,展开InteractiableSnapZone,选中Activation Area。
在Inspector面板找到Sphere Collider,这就是激活区,尝试将其中的半径值更改为0.2。
运行,试着用手柄拾取其中一个夹具,靠近激活区观察变化。
(三)更改激活区高亮显示模型(Changing the Snap Zone Highlight Mesh)
(四)改变高亮显示物体的外观(Changing Highlight from Outline to Translucent)
(五)对SZ进行转换、缩放和旋转设置(Transition,Scale, and Rotation of SZ's)
在 Hierarchy面板选择父物体InteractiableSnapZone,在Inspector面板将“Transition Duration”修改为0.5。这意味着当物体被释放时,它需要半秒钟的时间才能在新的位置显现。
要对SZ做缩放或旋转,在 Hierarchy面板选择InteractiableSnapZone>SnapDestination>DestinationLocation,在Inspector面板修改相应的参数。作为示范,我使用了Scale: 5,5,5 Rotation: 70,70,70。在游戏测试中,你会发现到一个夹具被放在SZ中时将会出现一个看起来很庞大的半透明夹具。
(六)设置激活区的有效性(Snap Zone Validity)——只对特定物体起作用
在 Hierarchy面板选中InteractableSnapZone,在Inspector面板为其添加组件“List Contains Rule”。
添加另一个名为“Unity Object Observable List”的组件,以保存可以放入SZ的对象列表。
在“Unity Object Observable List”组件的底部,将Element size从0更改为1。
从 Hierarchy面板将RedClampGood拖到“Unity Object Observable List”组件的Element 0字段中。
将“Unity Object Observable List”组件拖到“List Contains Rule”组件的Objects field 。
将“List Contains Rule”拖给“Snap Zone Facade”组件的Snap Validity字段。
播放测试。
(七)放置Red SZ(Positioning the Red SZ)
(八)在运行模式细调GoodRedSZ的位置(Positioning in Play Mode)
(九)复制出Black SZ(Duplicate Red to Black SZ)
第5课 VR用户界面(VR User Interface)
在本课你将学习如何使用Text Mesh Pro创建好看的文本,导入自定义字体并与Text Mesh Pro一起使用,精确设置交互对象的抓取位置,避免游离于你的手之外。
(一)创建新的世界空间画布(New Canvas in World Space)
(二)自定义文本(Custom Google Fonts)
(三)格式化文本(Formatting Text)
调整字体大小,使“Jump Start!”位于同一行。
在检视器面板添加“Underlay”(阴影)。我使用了设置:偏移X:.46,偏移Y:-.82,柔和度:.137。
在层级面板,复制TMP文本(Control+D),将标题命名为“JumpStartText”,将新副本命名为“Directions”。
在Inspector的文本字段中,添加导航文字,我用了这段文字:
Red Good
Red Dead
Black Good
Black Dead
文本左对齐,在层级面板中选择画布并将其沿Y轴向下移动到适合的位置,使文字排版美观易阅读。
(四)为文本添加布告牌背景(Billboard Background for Text)
从Assets>VRTK>prefables>Interactions>interactivatables中选择我们之前曾经使用过的预置立方体"Interactable.Primary_Grab.Secondary_Swap"。
将立方体比例设置为X:1、Y:2.59、Z:3.2,位置设置为X:-4.85、Y:1.31和Z:-0.8。
在层级面板,将可交互预制体重命名为“Billboard”。
将前面创建的画布放给Billboard,成为其子对象。
(五)Clipboard-sized Instructions
在层级面板,复制(control+D)Billboard,将其命名为 "Clipboard"。
将 "Clipboard"的比例设置为X:0.1、Y:0.2、Z:0.2,使用顶点捕捉(控制+拖动)将其放置到夹具工作台上。
提示:为方便操作,可临时隐藏“testsz”和Cylinder。
(六)调整交互对象的精确抓取位置(Adjustments and Precision Grabbing Objects)
在层级面板依次展开Clipboard > Interaction Logic > Interactable.GrabLogic > Actions > PrimaryAction ,选中其下 Interactable.GrabAction.FollowAction。
在检视器面板找到Grab Interactable Follow Action(Script)组件,在“Grab Offset”字段右侧下拉菜单选择“Precision Point”。
运行,测试差异。