将单人游戏转换为Unity多人游戏

本文档介绍了使用新的Unity多人联网系统将单人游戏转换为多人游戏的步骤。这里描述的过程是真实游戏实际过程的简化,更高级的版本;它并不总是像这样工作,但它提供了该过程的基本配方。

NetworkManager设置

  1. 将一个新的GameObject添加到场景并将其重命名为“NetworkManager”。
  2. NetworkManager组件添加到“NetworkManager”游戏对象。
  3. NetworkManagerHUD组件添加到GameObject。这提供了用于管理网络游戏状态的默认UI

请参阅使用NetworkManager。

玩家预制设置

  1. 在游戏中查找玩家GameObject的预制件,或从玩家GameObject创建预制件
  2. NetworkIdentity组件添加到玩家Prefab
  3. 检查NetworkIdentity上的LocalPlayerAuthority
  4. playerPrefabNetworkManagerSpawn Info部分设置为玩家预制
  5. 如果它存在于场景中,则从场景中移除玩家GameObject实例

有关更多信息,请参阅玩家对象

球员运动

  1. NetworkTransform组件添加到玩家Prefab
  2. 更新输入和控制脚本来尊重 isLocalPlayer
  3. 修复相机使用衍生玩家和 isLocalPlayer

例如,该脚本仅处理本地玩家的输入:

  1. using UnityEngine;
  2. using UnityEngine.Networking;
  3. public class Controls : NetworkBehaviour
  4. {
  5. void Update()
  6. {
  7. if (!isLocalPlayer)
  8. {
  9. // exit from update if this is not the local player
  10. return;
  11. }
  12. // handle player input for movement
  13. }
  14. }

基本玩家游戏状态

  1. 使包含重要数据的脚本继承NetworkBehaviours而不是MonoBehaviours
  2. 将重要的成员变量放入SyncVars

请参阅状态同步。

联网行动

  1. 将执行重要操作的脚本制作成NetworkBehaviours而不是MonoBehaviours
  2. 将执行重要玩家动作的功能更新为命令

请参阅联网的操作。

非玩家GameObjects

修复诸如敌人之类的非玩家预制:

  1. 添加NetworkIdentify组件
  2. 添加NetworkTransform组件
  3. NetworkManager注册可重复使用的预制件
  4. 用游戏状态和动作更新脚本

生成

  1. 潜在地将spawner脚本更改为NetworkBehaviours
  2. spawners修改为仅在服务器上运行(使用isServer属性或OnStartServer()函数)
  3. 调用NetworkServer.Spawn()创建的GameObjects

产生玩家的位置

  1. 添加一个新的GameObject并将其放置在玩家的起始位置
  2. NetworkStartPosition组件添加到新的GameObject

前厅

  1. 创建大厅场景
  2. 将新的GameObject添加到场景并将其重命名为“NetworkLobbyManager”。
  3. NetworkLobbyManager组件添加到新的GameObject中。
  4. 配置管理器:
  5. 场景
  6. 组合屋
  7. 产卵

?