SharedSpaces是一个多人游戏展示平台,主要是用于演示如何通过Oculus的Social APIs来支持多人共在,从而联结大家。
1. SharedSpaces的组成拼图
团队主要是通过以下技术来实现所述目标:
1.1 Social APIs
为了帮助沟通人们在Quest生态系统中的位置,Oculus创建了Destinations和Group Presence的概念。Destinations是你为应用定义的兴趣点,而你可以在其中一个Destination设置用户的Group Presence,以及大厅和匹配标识符。
然后,用户可以使用系统用户界面邀请朋友加入。收件人的头显会弹出一条通知,如果接受邀请,应用则启动,并显示发件人的Group Presence详细信息。
在SharedSpaces中,我们只需要大厅和匹配会话ID就可以在传输层建立通信路径。
1.2 Photon Realtime SDK
Photon Realtime SDK是众多应用采用的一种流行传输层,特别是Unity游戏引擎。团队发现,社区需要更多的Unreal相关示例,所以创建了一个UE4网络驱动程序,以及一个用于Photon Realtim SDK的UE4插件,从而帮助你轻松地在自己的项目中重用。
进行通信的玩家需要参加同一个会话(称为Photon room)。在SharedSpaces的情况下,我们只需使用玩家的大厅或匹配会话标识符作为房间名称。如果你接受了邀请,你最终会和发送者存在于同一个房间里。
1.3 Unreal+Unity
SharedSpaces是使用Unreal引擎构建,然后移植到Unity。
两个引擎都使用client-server架构。大多数应用需要在数据中心托管一台专用服务器。在这个示例中,Oculus选择将服务器托管在其中一个头显,因为这样可以减少对基础设施的需求。它同时允许你轻松地根据需要快速启动和停止服务器。
选择托管游戏服务器的玩家是Photon room中最初的成员,称为主客户端,其他玩家则作为游戏客户端接入。所以,数据包路由如下所示:
在传输层,所有玩家都连接到Photon主服务器,这是一个通用服务器(而不是游戏服务器)。
在game level,UE4/Unity服务器(由Photon room中最初的玩家托管)接收来自所有玩家的数据包,并根据需要将其复制到其他客户端。
当主客户端离开时所需的主机迁移同时有在SharedSpace中演示。若当前托管房间的玩家离开,责任将转移到新的主客户端,然后所有其他玩家重新接入这个新的主客户端。
2. SharedSpaces的设计
团队将设计的重点放在Group Presence和Networking。
你从一个大厅开始(除非你是在接受邀请),从那里你可以使用前往不同的房间。你可以从每个房间打开花名册和邀请面板以发送邀请。
3. SharedSpaces的代码结构(UE4)
因为使用了Photon作为传输层,所以Oculus决定不使用Oculus UE4 OSS(Online SubSystem),因为新的Destinations和Group Presence功能在这个API中没有等效功能。相反,团队构建了一个新的Oculus Platform Subsystem(UE4游戏实例子系统),并构建了第二个UE4游戏实例子系统,以与使用的Photon SDK功能接口。你可以在自己的项目中随意重用。
这两者都是在project level实现,特别是在SharedSpace游戏实例蓝图中。
如有兴趣,你可以下载并安装SharedSpace项目。
4. 代码和文档
SharedSpace已经作为一个完整的开源项目提供,包含源代码和文档。
UE4
Unreal
5. 演示
如果你只是单纯希望尝试体验,你可以在App Lab找到SharedSpaces。