Unity多人游戏
终极目标
好了,现在要进行的是多人游戏方面的工作。
首先说第一个,终极目标。
终极目标是实现我们的项目的三个乘客和一个指挥员的联机运行。
状态机已经写好了,现在只需要连上网。
需要了解
开始了解unity联机原理。
需要了解的是:
一个网络管理员(器?)
一个玩家用来找到和加入游戏的用户图形界面
网络玩家预制体,玩家用来控制的
多人在线的脚本和物体
客户端服务器主机之间的关系
物体和动作的什么关系
网络管理员
- 有且只有一个
-
- 管理游戏状态
-
- 派生管理
-
- 场景管理
-
- 调试信息
-
- 匹配
-
- 定制
- 三种联网模式
-
- 客户端
-
- 服务器
-
- 同时作为服务器和客户端的主机
派生管理
一个代表玩家的预制体
将NetworkIdentity组件添加到玩家预制体上
一旦分配了一个玩家预制体就可以作为主机开始游戏
停止游戏会破坏玩家的预制体
要向网络管理员注册预制体
网络管理员通过newworkmanager.onserveraddplayer的方法生成玩家
起始位置
NetworkStartPosition确定玩家生成的位置
RoundRobin循环设置Startposition
GetStartPosition查找起始位置
场景管理
分为离线场景和在线场景
启动服务器或者主机将加载在线场景
在线场景名称存储在networkSceneName中
断开时可自动返回菜单场景
NetworkManager.ServerChangeScene() 可对所有连接的客户端更新场景
StartHost或者StopClient可能导致场景更改
场景更改会导致前一个场景被销毁
保证网络管理器设置为DontDestryOnLoad
也可以在不同场景单独设置网络管理器
定制
网络管理器HUD
运行时显示GUI
可以选择局域网模式和匹配模式两种
自己使用的时候要将Network Discovery 集成进去
匹配模式
创建
查找
向多人游戏服务发送请求
返回游戏当前存在的所有匹配项的列表
单击加入匹配就能加入
单人游戏转换为多人游戏
网络管理员的设置
添加NetworkManager
玩家预制体
创造预制体
在NetworkIdentity添加预制体
检查NetworkIdentity的LocalPlayerAuthority
将playerPrefab
NetworkManager的“ Spawn Info”部分设置为玩家预制体
如果场景中存在玩家实例,则移除它
玩家动作
将NetworkTransform组件添加到玩家预制体
更新输入和控制脚本以遵守isLocalPlayer
修复相机来遵守派生的玩家和isLocalPlayer
游戏状态
将重要的数据放入NetworkBehaviours而不是Mono
将重要的成员放入SyncVars
联网动作
如上第一条
将执行重要玩家操作的功能更新为命令
非游戏玩家对象
添加NetworkIdentity<