![Megacity Multiplayer](Readme/header.jpg) ## 目录 - [关于 Megacity Multiplayer](#关于-Megacity-Multiplayer) - [Megacity Multiplayer 系统要求](#Megacity-Multiplayer-系统要求) - [Mac 推荐配置](#mac-推荐配置) - [Windows 推荐配置](#windows-推荐配置) - [重要提示](#重要提示) - [克隆项目](#克隆项目) - [开始](#开始) - [服务器托管服务 Multiverse](#服务器托管服务-multiverse) - [MultiverseSDK 集成](#multiversesdk-集成) - [Multiverse Room API 集成](#multiverse-room-api-集成) - [构建项目](#构建项目) - [Server](#server) - [Client](#client) - [游戏控制](#游戏控制) - [鼠标和键盘](#鼠标和键盘) - [资源索引](#资源索引) - [游戏玩法](#游戏玩法) - [音频](#音频) - [网络连接](#网络连接) - [在线服务](#在线服务) - [UI](#ui) - [工具和实用程序](#工具和实用程序) - [免责声明](#免责声明) - [Licence](#licence) ## 关于 Megacity Multiplayer Megacity Multiplayer 是以原始 Megacity 游戏为基础,结合 Multiverse 强大功能而成的动作射击游戏。这款游戏提供了同时支持超过 64 名玩家的沉浸式多人游戏体验。通过最新的 Unity Online Services (UOS),我们致力于优化 Megacity Multiplayer 用户体验。Megacity Multiplayer 展示了如何运用一套网络代码和多人工具、技术和服务,创造出吸引人的、沉浸式的多人体验。 此样例的关键特性包括: - 使用 Unity 的实体组件系统(ECS)进行大规模流媒体和渲染 - 每场游戏对局可支持 64+ 玩家 - 使用 Netcode for Entities 进行服务器授权的游戏玩法,包括功能预测、插值和延迟补偿 - 集成 Unity Online Services(UOS)中的 Multiverse 服务 - 高清渲染管线 (HDRP) - 支持 Windows 和 Mac 的跨平台游戏 ## Megacity Multiplayer 系统要求 Megacity Multiplayer 与 Unity **2022 LTS** 兼容,并已在 Windows 和 Mac 上进行过测试。 您可以通过以下链接下载编辑器: - Unity 官网:[下载 Unity LTS](https://unity.cn/products) ### Mac 推荐配置 - 操作系统:Mac OS X 10.15.7 - CPU:Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz - RAM:32GB - GPU:AMD Radeon Pro Vega 20 - 存储空间:20GB ### Windows 推荐配置 - 操作系统:Windows 10 64位 - CPU:Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz - RAM:32GB - GPU:NVIDIA GeForce GTX 1650 with Max-Q Design - 存储空间:20GB ## 重要提示 Megacity Multiplayer 的文件较大,因此**首次**克隆和运行可能需要比较久的时间,后续的加载应该会快得多。 首次克隆和加载时间估计: - 克隆 Megacity Multiplayer 仓库:最多需要 20 分钟 - 带库构建的项目打开时间:最多需要 20 分钟 - 进入主场景时,需要导入子场景:最多需要 20 分钟 - 进入游戏模式时,需要创建服务器世界:最多需要 30 分钟 ## 克隆项目 要获取 Megacity Multiplayer,您需要先登录 Plastic hub 并 **Fork 本仓库到自己组织下**,然后在 Unity Hub 中打开该云端项目。 ## 开始 克隆项目后,按照以下步骤开始: 1. 安装 Unity 2022 LTS 编辑器版本。在安装过程中,请确保包含了 Windows/Mac 的独立支持和专用服务器支持。 ![modules](Readme/modules.png) 2. 要将项目添加到 **Unity Hub**,点击 **添加** 按钮并选择克隆项目的根文件夹。 **注意**:首次打开项目可能会比较久,因为 Unity 需要导入所有资源。 ## 服务器托管服务 Multiverse Megacity Multiplayer 使用 [UOS](https://uos.unity.cn/) 的服务器托管服务 [Multiverse](https://uos.unity.cn/product/multiverse) 来实现多人联机对战。要开始使用游戏服务器托管,请参考官方 [Multiverse 文档](https://uos.unity.cn/doc/multiverse)。 ### Multiverse 服务配置 要将 Megacity Multiplayer 部署在 Multiverse 服务器上并使用房间管理功能,需要在 [MultiverseRoomAPI](Assets/Scripts/Gameplay/Lobby/MultiverseRoomAPI.cs) 中配置以下参数: ```c# private readonly string appId = "Your App ID"; private readonly string appSecret = "Your App Secret"; private readonly string gameRegionId = "Your Region ID"; private readonly string multiverseProfileId = "Your Profile ID"; ``` App ID 和 App Secret 为您创建的 UOS APP 的认证信息。Region ID 为您创建的 Multiverse 服务器的地域 ID。Profile ID 为您创建的 Multiverse 服务器的启动配置 ID。 ### MultiverseSDK 集成 Megacity Multiplayer 集成了 MultiverseSDK,以便在游戏中使用 Multiverse 服务。要了解如何集成 MultiverseSDK,请参考 [MultiverseSDK.cs](Assets/Scripts/Gameplay/Lobby/MultiverseSDK.cs) 以及 [服务端 SDK 文档](https://uos.unity.cn/doc/multiverse/server-sdk) `MultiverseSDK.cs` 提供了以下功能: - `StartMultiverse`:创建 Multiverse 实例并标记为 Ready 状态。 - `ShutdownMultiverseInTTL`:在 TTL 时间内释放 Multiverse 实例,用于在服务器内没有玩家时释放服务器以节省资源。 - `CancelShutdown`:撤销定时释放,用于有新玩家加入房间时撤销释放服务器请求。 ### Multiverse Room API 集成 Megacity Multiplayer 集成了 Multiverse Room API,以便在游戏中使用房间与大厅服务。要了解如何使用 Multiverse Room API,请参考 [MultiverseRoomAPI.cs](Assets/Scripts/Gameplay/Lobby/MultiverseRoomAPI.cs) 以及 [ROOM API 文档](https://uos.unity.cn/doc/multiverse/room-api) `MultiverseRoomAPI.cs` 提供了以下功能: - `GetRoomList`:获取房间列表。 - `CreateRoom`:创建房间。 - `JoinRoom`:加入房间。 - `LeaveRoom`:离开房间。 - `ConnectByIP`:通过IP地址连接到服务器。 ## 构建项目 点击 File -> Build Settings。**Platform** 选择您想要构建的平台,然后点击 **Switch Platform**。 ![Build Settings](Readme/build-settings.png) ![build](Readme/build.png) ### Server **Platform** 选择 Dedicated Server,**Target Platform** 选择 Linux,然后点击 **Build** 即可构建您的服务器程序。 ### Client **Platform** 选择 Windows, Mac, Linux,**Target Platform** 选择 Windows/Mac,然后点击 **Build** 即可构建您的客户端程序。 ## 游戏控制 ### 鼠标和键盘 | 输入 | 动作 | |--------------|--------------| | 鼠标移动 / 箭头键 | 方向控制 | | 左键点击 / 空格键 | 射击 | | W/S | 前进 / 后退 | | A/D | 方向控制 | | E/Q | 翻滚 | | Tab | 设置 | | P | Netcode 面板统计 | | 无按键操作 | 自动水平 | ## 资源索引 ### 游戏玩法 - [Vehicle Input System](Assets/Scripts/Gameplay/Player/PlayerVehicleInputSystem.cs) - [PlayerVehicleJobs](Assets/Scripts/Gameplay/Player/Jobs/PlayerVehicleJobs.cs) - [SetupPlayerInfoSystem](Assets/Scripts/Gameplay/Player/SetupPlayerInfoSystem.cs) - [ShootingSystem](Assets/Scripts/Gameplay/Shooting/ShootingSystem.cs) - [BoundSystem](Assets/Scripts/Gameplay/Misc/BoundsSystem.cs) - [SpawnPoint](Assets/Scripts/Gameplay/Misc/MonoBehaviours/SpawnPoint.cs) - [UpdatePlayerRankSystem](Assets/Scripts/Gameplay/Player/UpdatePlayerRankSystem.cs) ### 音频 - [SoundPoolSystem](Assets/Scripts/Gameplay/Audio/SoundPoolSystem.cs) - [AudioMaster](Assets/Scripts/Gameplay/Audio/MonoBehaviours/AudioMaster.cs) ### 网络连接 - [NetcodeBootstrap](Assets/Scripts/Gameplay/Netcode/NetcodeBootstrap.cs) ### 在线服务 - [MultiverseSDK](Assets/Scripts/Gameplay/Lobby/MultiverseSDK.cs) - [MultiverseRoomAPI](Assets/Scripts/Gameplay/Lobby/MultiverseRoomAPI.cs) ### UI - [HUD](Assets/Scripts/Gameplay/UI/MonoBehaviours/HUD/HUD.cs) - [MainMenu](Assets/Scripts/Gameplay/UI/MonoBehaviours/MainMenu/MainMenu.cs) - [LobbyPanel](Assets/Scripts/Gameplay/UI/MonoBehaviours/LobbyPanel) - [UIGameSettings](Assets/Scripts/Gameplay/UI/MonoBehaviours/Settings/UIGameSettings.cs) ### 工具和实用程序 - [NetcodeExtensions](Assets/Scripts/Utils/NetcodeExtensions) - [NetcodePanelStats](Assets/Scripts/Utils/NetcodeExtensions/UI/NetcodePanelStats.cs) - [KDTree](Assets/Scripts/Utils/KDTree) - [Pooling](Assets/Scripts/Utils/Pooling) ## 免责声明 此存储库不接受 Pull Request、GitHub 审核请求或任何其他 GitHub 托管的问题管理请求。 ## Licence Megacity Multiplayer 根据 Unity Companion License 进行许可。参见 [LICENCE](LICENCE.md) 获取更多法律信息。