第5章与物体的复杂交互 在VR场景中经常需要打开门窗、拉开抽屉以及拨动摇杆等交互操作,本章将讨论如何利用XR Interaction Toolkit实现这些操作。 视频讲解 5.1建立可交互的门 在Unity网站的Asset Store中找到Door Free PackAferar包,单击“添加至我的资源”按钮,如图51所示。 图51Door Free Pack Aferar包 在Unity编辑器的Package Manager面板中寻找刚加入的Door Free PackAferar包,单击Import按钮,如图52所示。 图52Package Manager面板 在弹出的Import Unity Package对话框中,单击Import按钮,如图53所示。 在Assets中01_AssetStore\DoorPackFree\Prefab目录下寻找DoorV3预制件,将其拖放到Hierarchy视图中,如图54所示。 图53Import Unity Package对话框 图54DoorV3预制件 调整DoorV3的Scale比例大小为1.6,在Scence视图中稍稍提高一下DoorV3的Position的Y的数值,为了更加方便地开启门,防止门与地面发生碰撞,如图55所示。 图55调整DoorV3的Scale比例大小为1.6 选择DoorV3下的01_low游戏对象,设定Layer为DirectGrab,如图56所示。 图56设定Layer为DirectGrab 选择Hierarchy视图中的LeftHand Controller,设定其XR Ray Interactor组件的Interaction Layer Mask如图57所示。 图57设定Interaction Layer Mask 设定XR Ray Interactor组件的Raycast Mask如图58所示。 回到DoorV3下的01_low游戏对象,为其添加Hinge Joint组件,单击按钮调整连接器的轴的位置,并开启Use Spring选项,设定Damper为60,设定Axis的Z轴为1,如图59所示。Damper的数值越高,对象减速越慢。 为DoorV3下的01_low游戏对象开启Hinge Joint组件的Use Limits选项,并手动调整红色手柄,设定其Min值和Max值,如图510所示。 为DoorV3下的01_low游戏对象添加Rigidbody组件,设定Collision Detection为Continuous,如图511所示。 为DoorV3下的01_low游戏对象添加Box Collider组件,如图512所示。 图58设定Raycast Mask 图59Hinge Joint组件 图510调整红色手柄 图511Rigidbody组件 图512Box Collider组件 添加Box Collider后的门,如图513所示。 在01_low游戏对象下添加Handle游戏对象,如图514所示。 在Handle游戏对象上添加Box Collider组件,如图515所示。 单击按钮,调整Box Collider的大小,使其覆盖门的把手,如图516所示。 图513添加Box Collider后的门 图514添加Handle游戏对象 图515添加Box Collider组件 图516调整Box Collider的大小 为DoorV3下的01_low游戏对象添加XR Grab Interactable组件,设定Handle为Colliders列表的一项,设定Movement Type为Velocity Tracking,用于方便跟踪控制器的运动,如图517所示。 图517XR Grab Interactable组件 视频讲解 5.2建立可交互的抽屉 在Unity编辑器的菜单栏中选择Assets→Import Package→Custom Package选项,导入cabinet.unitypackage,如图518所示。 图518导入cabinet.unitypackage 选择Assets目录下的Prefabs目录下的Cabinet预制件,如图519所示。 图519Cabinet预制件 拖放Cabinet预制件到Hierarchy视图中,选择其下的Drawer游戏对象,如图520所示。 图520选择Drawer游戏对象 设定Drawer的Layer为DirectGrab,如图521所示。 图521设定Drawer的Layer为DirectGrab 给Drawer游戏对象添加XR Grab Interactable组件,设定Drawer front为Colliders列表的一项,设定Movement Type为Velocity Tracking,如图522所示。 图522XR Grab Interactable组件 给Drawer游戏对象添加Configurable Joint组件,设定Axis 的Z项为-1,将X Motion设定为Limited,而将Y Motion、Z Motion、Angular X Motion、Angular Y Motion以及Angular Z Motion设定为 Locked,设定Damper 为60,Limit为0.8,如图523所示。 图523Configurable Joint组件 视频讲解 5.3建立可交互的摇杆 在Hierarchy视图中建立名为Level的立方体,设定其Layer为DirectGrab,如图524所示。 图524建立名为Level的立方体 调整Level的大小和位置,如图525所示。 图525调整Level的大小和位置 在Hierarchy视图中,复制Level游戏对象,将其改名为Handle,并将其拖放为Level的子对象,如图526所示。 调整Handle的大小和位置,使其变成如图527所示的形状。 在Hierarchy视图中选择Level游戏对象,为其增加Rigidbody组件,设定Collision Detection为Continuous,关闭Use Gravity选项,开启Is Kinematic选项,使得其不受重力影响,如图528所示。 图526改名为Handle 图527调整Handle的大小和位置 图528Rigidbody组件 为Level游戏对象添加Hinge Joint组件,设定Axis的Z为1,单击按钮,调整轴所在位置,开启Use Spring选项,设定Damper为80,开启Use Limits选项,设定Min为-60,Max为60,如图529所示。 为Level游戏对象添加XR Grab Interactable组件,设定Handle为Colliders列表的一项,设定Movement Type为Velocity Tracking,如图530所示。 图529Hinge Joint组件 图530XR Grab Interactable组件