logo
4
0
WeChat Login

Banner

Boss Room - 基于Unity Netcode for GameObjects开发的多人RPG游戏

Boss Room是一个基于Unity Netcode开发的多人协作RPG游戏。它是作为一个在网络游戏中的常见游戏模式的示例游戏开发出来的。

你可以在你自己的Unity游戏中使用这个项目中的任何素材和代码。该项目基于Unity Companion License开发。

重要提醒:

  • Boss Room目前已经支持在以下平台上开发和测试 (Windows, Mac, iOS, 和Android).
  • Boss Room目前支持最新的Unity LTS版本.
  • 在安装Unity Editor时请确保安装了Windows/Mac单独支持。如需要专用游戏服务器的支持,还需要安装Windows/Linux Dedicated Server支持。(Linux还需要安装IL2CPP和Mono的Build支持)

获取项目文件

第一次打开项目文件

下载好项目文件后,请按照一下步骤来打开和运行游戏:

  • 确保安装了推荐版本2021.3.6f1或更新的Unity Editor。
    • 确保安装了Windows/Mac单独支持。
    • 确保安装了Windows/Linux Dedicated Server支持。
    • 确保安装了Linux IL2CPP和Mono的Build支持。
  • 第一次打开项目时Unity会导入所有的资源文件,这可能会花费较长的时间。
  • 当Editor导入结束后,在 Project 窗口中打开 Project/Startup 场景
  • 在此场景中可以点击 Play 来运行游戏。

测试多人游戏

为了测试多人游戏联机功能我们可以在开发机上运行多个游戏实例,可以使用ParrelSync,也可以通过网络与朋友进行联机,详见如何测试


本地多人游戏配置

首先我们需要编译出一个可执行程序,在菜单中找到 File/Build Settings 然后点击 Build

编译完成后就可以在本地运行多个游戏实例来做主机和从机。

Mac用户要运行一个程序的多个实例需要在命令行下执行 open -n BossRoom.app


公网上的多人游戏配置

要在公网上实现多人联机,首先需要将可执行文件共享给所有玩家。参考上一部分。

其次则需要有中转网络通信的手段,目前可以有两种选择:

  • 使用一个Relay服务器来进行中转,目前Boss Room提供了Unity Relay的支持。
  • 将Boss Room编译成Headless专用游戏服务器,使用Multiverse来托管一个专用的游戏服务器进行中转。

专用游戏服务器

目前Boss Room支持专用游戏服务器模式,可以支持运行一个无玩家的Headless的服务器。请按照以下步骤进行编译:

  1. 在菜单中找到 File/Build Settings 并将编译目标切换成 Dedicated Server,目标平台选择 Windows 或者 Linux
  2. 切换好编译目标后(第一次可能会花较长时间),点击 Build
  3. 编译完成后,执行编译出的可执行文件(命令行支持-port=的参数来指定服务器监听的端口)。
  4. 打开游戏可执行文件,在Direct IP模式下连接127.0.0.1的默认端口即可进行联机。

编译出的专用游戏服务器可以上传至游戏服务器托管服务(如Multiverse)。

与Multiverse进行集成

Multiverse是一个基于Kubernetes的游戏服务器托管服务。游戏开发者可以将自己的游戏服务器打包成Docker镜像,方便地进行弹性的游戏服务器运行/销毁。

重要提醒: 目前Multiverse只支持Linux的Docker镜像。

以Boss Room游戏为例,请按照以下步骤来将你的游戏与Multiverse进行集成:

集成Multiverse SDK

Multiverse SDK是游戏服务器用来维护在Multiverse中的状态和生命周期的。

重要提醒: 目前Multiverse只提供了Unity的SDK(其他语言的SDK会陆续放出)。

  1. 将Unity SDK的代码添加到Unity Project中。
  2. 给专用游戏服务器的运行入口添加Multiverse SDK的依赖。修改Assets/Scripts/Gameplay/Unity.BossRoom.Gameplay.asmdef:
"references": [ ... ... "Unity.BossRoom.ConnectionManagement", "VContainer", "Unity.Cn.Multiverse" ],
  1. 在Unity Editor Project窗口,搜索DSLobbyManagementState, 给专用游戏服务器的运行入口DSLobbyManagementState(Prefab Asset)添加一个Multiverse SDK的组件。

  2. 修改DSLobbyManagementState.cs,添加MultiverseSDK的初始化代码。

using VContainer; using Unity.Cn.Multiverse; ... ... public class DSLobbyManagementState : GameStateBehaviour { [Inject] ConnectionManager m_ConnectionManager; public override GameState ActiveState => GameState.DedicatedServerLobbyManagement; private MultiverseSdk m_Multiverse = null; ... ... IEnumerator StartServerCoroutine() { DedicatedServerUtilities.Log($"Starting Headless Server, listening on address {address}:{port}"); m_ConnectionManager.StartServerIP(address, port); // This will switch to the char select scene once the server started callback has been called // Start the multiverse SDK StartMultiverse(); yield return new WaitForServerStarted(); // Less performant than just the callback, but way more readable than a callback hell. // TODO change scene to char select here and do other init. why is it handled by connection manager right now? SceneLoaderWrapper.Instance.AddOnSceneEventCallback(); SceneLoaderWrapper.Instance.LoadScene(SceneNames.CharSelect, useNetworkSceneManager: true); } ... ... private async void StartMultiverse() { m_Multiverse = GetComponent<MultiverseSdk>(); bool ok = await m_Multiverse.Connect(); if (ok) { Debug.Log(("Server - Connected")); } else { Debug.Log(("Server - Failed to connect, exiting")); Application.Quit(1); } ok = await m_Multiverse.Ready(); if (ok) { Debug.Log($"Server - Ready"); } else { Debug.Log($"Server - Ready failed"); Application.Quit(); } }

编译游戏服务器

  1. 在菜单中找到 File/Build Settings 并将编译目标切换成 Dedicated Server,目标平台选择 Linux
  2. 切换好编译目标后(第一次可能会花较长时间),点击 Build ,并保存为BossRoom.x86_64
  3. 将编译出的目录打包成zip文件:BossRoom.zip(打包时请保持BossRoom.x86_64文件在zip包根目录)。

创建Multiverse Game

  1. Multiverse快速向导中开始Multiverse Game的创建。注意:由于docker镜像名字的限制,游戏名称暂时不可以包含大写字母。
  2. 创建游戏档案。对于BossRoom的游戏服务器,推荐至少512mb的内存限制。
  3. 创建游戏镜像。注意:容器端口填游戏服务器的默认端口9998。可执行文件填BossRoom.x86_64,该参数指的是游戏服务器可执行文件在zip包中的相对路径。在选择游戏包中选择刚才打包好的BossRoom.zip。上传结束后,点击创建游戏镜像。创建结束后,点击提交游戏镜像来将该镜像用于正式游戏服务器托管。
  4. 创建游戏地域。
  5. 创建并启用游戏档案可用区。

在Multiverse中创建游戏服务器

  1. 在Multiverse游戏服务器面板,点击 分配游戏服务器 ,创建一个指定游戏档案的游戏服务器。
  2. 刷新游戏服务器列表,获取刚刚建立的游戏服务器地址。
  3. 打开Boss Room游戏客户端,在 Join With IP 面板,输入刚刚获得的地址。(可打开两个客户端一起游玩)。
  4. 双方都加入后,即可联网进行游戏。

关于Multiverse的详细文档,请参见https://xxxx

About

No description, topics, or website provided.
216.71 MiB
4 forks0 stars1 branches0 TagREADMEOther license
Language
C#91.5%
Markdown5.1%
gitignore2%
Python0.1%
Others1.3%