1.Main Camera→OVRCameraRig
将新建场景中的Main Camera替换为Packages文件夹中的OVRCameraRig预制体,OVRCameraRig实际上是在Meta XR Core SDK的Prefabs文件夹中的,接下来就要配置挂载其中的OVR Manager组件。
2.配置OVR Manager组件
Tracking Origin Type:修改为Floor Level
Passthrough Support:改为Supported或Required
Enable Passthrough:勾选启用透视
3.创建透视层
在场景中创建一个空物体Passthrough,然后挂载上OVR Passthrough Layer脚本,将其Placement属性设置为Underlay。
在Quest中看到的现实场景属于一个图层,虚拟场景和虚拟物品相当于另外的图层
当Placement属性为Underlay时,透视的现实图层会在应用图层的最底端,这时虚拟图层就会在现实图层之上;
反之,为Overlay时,现实图层位于最顶端,现实图层就会位于虚拟图层之上了;
这与Photoshop中的图层的规律是一样的,上面的图层会覆盖下面的图层,所以透视图层的Placement值为Underlay时所展现的效果是展示虚拟物体和场景,Overlay则是不展示虚拟物体和场景;
4.去除背景
首先按Ctrl + 9,将天空盒材质置空
没有了Main Camera,OVRCameraRig是游戏对象,CenterEyeAnchor中的Camera组件则代表了头部相机,将Clear Flags设置为Solid Color,背景颜色设置为纯黑色。
5.开启调试
将任意一个物体放在场景中,调整好其变换属性,如图是创建了一个小正方体,运行项目,在头显中观察。
由于Meta的隐私政策,Unity的Game视图中不会显示现实场景,所以刚才的背景设成黑色是便于展示。
6.基本交互功能的实现
继续使用Packages文件夹中的对象
OVRInteraction:将其作为玩家物体OVRCameraRig的子物体,负责玩家的所有交互功能;
OVRHands:作为OVRInteraction的子物体;
OVRHandPrefab:LeftHandAnchor和RightHandAnchor的子物体;
OVR[Left/Right]HandSynthetic:OVRHands的子物体,手部模型的渲染目标;
HandGrabInteractor:负责处理手部抓取的交互动作
配置这些对象
OVRHandPrefab
在这里只需要使用到OVR Hand和OVR Skeleton这两个脚本的功能,其余脚本可以先不用;
LeftHandAnchor下的OVRHandPrefab的脚本组件中的HandType都设置为Hand Left,RightHandAnchor的则设置为Hand Right;
若勾选Enable Physics Capsules,则会给手自动添加上碰撞体,是否勾选依需求而定;
OVR[Left/Right]HandSynthetic
将同一层级下的[Left/Right]Hand对象分别赋值给OVR[Left/Right]HandSynthetic的SyntheticHand组件的I Modify Data From Source属性,注意左右不要弄混;
HandVisuals[Left/Right]
因为OVR[Left/Right]HandSynthetic会渲染手部模型,为了防止重复渲染,隐藏或删除HandVisuals[Left/Right]
HandGrabInteractor
激活Visuals下面的HandGrabVisual和HandGrabGlow
HandGrabVisual
将左右手的OVR[Left/Right]HandSynthetic分别赋给其对应的HandGrabVisual的属性。
HandGrabGlow
给Hand Visual, Hand Renderer, Material Editor属性赋值,依旧是左右手对应;
让物体变成可抓取的
给物体添加刚体,再添加Grabbable和Hand Grab Interactable脚本,勾选Transfer On Second Selection,这样就能够实现双手的交替抓取;
最后运行项目