将单人游戏转换为Unity多人游戏
本文档介绍了使用新的Unity多人联网系统将单人游戏转换为多人游戏的步骤。这里描述的过程是真实游戏实际过程的简化,更高级的版本;它并不总是像这样工作,但它提供了该过程的基本配方。
NetworkManager设置
• 将一个新的GameObject添加到场景并将其重命名为“NetworkManager”。
• 将NetworkManager组件添加到“NetworkManager”游戏对象。
• 将NetworkManagerHUD组件添加到GameObject。这提供了用于管理网络游戏状态的默认UI。
请参阅使用NetworkManager。
玩家预制设置
• 在游戏中查找玩家GameObject的预制件,或从玩家GameObject创建预制件
• 将NetworkIdentity组件添加到玩家Prefab
• 检查NetworkIdentity上的LocalPlayerAuthority框
• 将playerPrefabNetworkManager的Spawn Info部分设置为玩家预制
• 如果它存在于场景中,则从场景中移除玩家GameObject实例
有关更多信息,请参阅玩家对象
球员运动
• 将NetworkTransform组件添加到玩家Prefab
• 更新输入和控制脚本来尊重 isLocalPlayer
• 修复相机使用衍生玩家和 isLocalPlayer
例如,该脚本仅处理本地玩家的输入:
using UnityEngine;
using UnityEngine.Networking;
public class Controls : NetworkBehaviour
{
void Update()
{
if (!isLocalPlayer)
{
// exit from update if this is not the local player
return;
}
// handle player input for movement
}
}
基本玩家游戏状态
• 使包含重要数据的脚本继承NetworkBehaviours而不是MonoBehaviours
• 将重要的成员变量放入SyncVars中
请参阅状态同步。
联网行动
• 将执行重要操作的脚本制作成NetworkBehaviours而不是MonoBehaviours
• 将执行重要玩家动作的功能更新为命令
请参阅联网的操作。
非玩家GameObjects
修复诸如敌人之类的非玩家预制:
• 添加NetworkIdentify组件
• 添加NetworkTransform组件
• 用NetworkManager注册可重复使用的预制件
• 用游戏状态和动作更新脚本
生成
• 潜在地将spawner脚本更改为NetworkBehaviours
• 将spawners修改为仅在服务器上运行(使用isServer属性或OnStartServer()函数)
• 调用NetworkServer.Spawn()创建的GameObjects
产生玩家的位置
• 添加一个新的GameObject并将其放置在玩家的起始位置
• 将NetworkStartPosition组件添加到新的GameObject中
前厅
• 创建大厅场景
• 将新的GameObject添加到场景并将其重命名为“NetworkLobbyManager”。
• 将NetworkLobbyManager组件添加到新的GameObject中。
• 配置管理器:
• 场景
• 组合屋
• 产卵
?