Unity+Mirror实现虚拟现实下的多人连接

    实现虚拟现实环境中的多人连接顾名思义分为两步,首先通过Mirror插件实现3D空间下的多人连接基础功能,其后调整虚拟现实相关内容,最后添加虚拟化身并进行匹配。本篇文章也将从以下三个方面依次完成(使用设备为HTC-VIVE Pro)。

一、多人连接

   通过Unity+Mirror插件可以实现基础的多人连接功能,不包括任何交互,可以较好的添加后续的虚拟现实中的交互操作。这一部分的内容网络上已经有较多的帖子,本篇多人连接内容的制作也是基于下面的文章。

Mirror + Unity 多人联机游戏的解决方案 - 知乎 (zhihu.com)

二、添加虚拟现实内容

1)首先导入SteamVR插件并完成其基础设置

2)再Assets列表中搜索Player和Teleporting预制体,并将其拖拽至多人连接的“Player”预制体下,这就完成了基础的添加。

 

 3)众所周知,在多人连接中,无论是客户端还是服务端都会生成一个玩家,即“Player”,那么所有玩家身上的控制代码是一致的,因此如果不加控制,可能会出现多端控制互相影响的情况;要解决这个问题,其一可以将控制方法限定在“isLocalPlayer”中,可以解决相关问题;而这种方法针对SteamVR 2.0自带的传送等相关方法就不是很合适了,改动内置脚本显然不是个好选择,这个时候可以通过新建一个控制脚本,来单独管理相关的方法,在玩家身上添加脚本并拖拽。

 4)检查作为多人连接玩家的“Player”上的“NetWork Transform”组件,确保“Client Authority”被勾选,随后添加“NetWork Transform Child”组件并勾选“Client Authority”,并在下边的“Target”中拖入之前添加的VR组件,以此来同步VR中玩家的位置等信息。

5)在之前第一部分创建的GamePlay场景中使用Teleport Area来创建可传送区域,或使用Teleport Point来实现定点移动。此时戴上头盔调整好局域网连接后,即可使用多个设备进入同一场景。

三、添加虚拟化身

  通过以上 两部分,可以基本实现虚拟现实下的多人连接功能,但此时因为“ScriptController”的控制脚本,在其他端口无法看到SteamVR相关的内容,因此无法相互看到,后续将通过添加虚拟化身的功能来实现互相可视。

1)选择合适的人物模型(附带骨骼),Unity资源商店中有部分免费资源,并修改其为人物模型,应用其骨骼。

2)在PackageManager中导入AnimationRigging插件。

3)将导入的人物模型,添加至玩家下,并选择 Animation Rigging->Bone Renderer Setup和Rig Setup,添加完成后,人物模型的骨骼即被显示并可以方便的选择。

4)在完成Rig Setup后,在人物模型(yangyuhuan)下即添加了一个名为Rig的空物体,在Rig下新建三个空物体,并重命名为“Head_Rig”、“LeftHand_Rig”、“RightHandRig”。

5)在“Head_Rig"下新建空物体并重命名为“HeadTarget”,在“Head_Rig"上添加“Multi-Parent Constraint”脚本,并选择其约束对象为人物模型头部的骨骼点,选择其匹配对象为新建的“headTarget”。完成后使用Animation Rigging->Align Transform调整“headTarget”的位置和骨骼点位置同步。

6)在“LeftHand_Target”上添加“Two Bone IK Constraint”组件,并根据骨骼结构,由浅到深将三个骨骼依次拖入Root、Mid和Tip中,随后在其下下新建两个空物体并命名为“LeftHand_Target”和“LeftHand_Hint”,选择这两个为骨骼匹配点Target和Hint,并调整这两个匹配点位置同相对应的骨骼位置一致。

7)根据同样的操作对右手进行相关的匹配操作。

8)在人物模型上添加脚本VRRig来实现控制器同骨骼匹配点的同步,拖入相应内容。

9)在玩家下添加四个“NetWork Transform Child”组件并勾选“Client Authority”,并在这四个组件下边的“Target”中依次拖入“yangyuhuan”、“headTarget”、“LeftHand_Target”、“RightHand_Target”。

10)检查ScriptController组件中需要做控制的部分是否都拖入其中。

四、总结

  经过以上三步,即可实现局域网下的虚拟现实多人连接功能,并且多个玩家可以通过模型来观察到彼此的人物动作。但是目前还存在着一些问题,目前没有对腿部相关的匹配,因此腿部是静止不动的,并且会随着头盔的上下移动而出现一定的穿模情况,这些都是可以进行后续改善的。

猜你喜欢

转载自blog.csdn.net/qq_38602613/article/details/127408311