本文档描述了使用 Mirror 创建多人游戏的步骤。这里描述的过程是真实游戏实际过程的简化、更高级别的版本;它并不总是像这样工作,但它提供了该过程的基本配方。
视频教程
查看这些精彩视频,向您展示如何开始使用Mirror。
脚本模板
更快地创建新的网络行为和其他常用脚本
请参阅脚本模板。
NetworkManager设置
- 向场景中添加一个新的游戏对象并将其重命名为“NetworkManager”。
- 将 NetworkManager 组件添加到“NetworkManager”游戏对象。
- 将 NetworkManagerHUD 组件添加到游戏对象。这提供了用于管理网络游戏状态的默认 UI。
请参阅使用 NetworkManager。
Player 预制件
- 在游戏中找到玩家游戏对象的 Prefab,或者从玩家游戏对象创建 Prefab。
- 将 NetworkIdentity 组件添加到玩家 Prefab
- 将 NetworkManager 的 Spawn Info 部分中的 playerPrefab 设置为 player Prefab
- 如果场景中存在玩家游戏对象实例,则将其从场景中移除
有关详细信息,请参阅Player Objects。
Player 移动
- 将 NetworkTransform 组件添加到Player Prefab
- 选中组件上的客户权限复选框。
- 更新输入和控制脚本以尊重 isLocalPlayer。
- 覆写 OnStartLocalPlayer 为玩家控制场景中的主摄像机。
例如,此脚本仅处理本地Player的输入:
using UnityEngine;
using Mirror;
public class Controls : NetworkBehaviour
{
void Update()
{
// exit from update if this is not the local player
if (!isLocalPlayer) return;
// handle player input for movement
}
}
基本玩家游戏状态
- 将包含重要数据的脚本制作成 NetworkBehaviours 而不是 MonoBehaviours
- 将重要的成员变量制作成 SyncVars
请参阅状态同步。
远程操作
- 将执行重要操作的脚本制作成 NetworkBehaviours 而不是 MonoBehaviours
- 将执行重要玩家操作的函数更新为命令
请参阅远程操作。
非玩家游戏对象
修复非玩家预制件,例如敌人:
- 添加 NetworkIdentity 组件
- 添加 NetworkTransform 组件
- 向 NetworkManager 注册可生成的 Prefab
- 使用游戏状态和Actions更新脚本
Spawners
- 可能将生成器脚本更改为 NetworkBehaviours
- 将生成器修改为仅在服务器上运行(使用 isServer 属性或 OnStartServer() 函数)
- 为创建的游戏对象调用 NetworkServer.Spawn()
玩家生成位置
- 添加一个新的游戏对象并将其放置在player’s start location
- 将 NetworkStartPosition 组件添加到新的游戏对象