UNET 已移至独立包,可以通过窗口菜单选项中的包管理器窗口找到它。该软件包名为 Multiplayer HLAPI。 UNet 已弃用,其中所有的API均为弃用的将来将从 Unity 中删除。一个新系统正在开发中。
Component组件:
Network Manager组件
用于控制网络游戏的状态。它在编辑器中提供了一个用于配置网络的界面、用于生成游戏对象的预制件,和用于不同的游戏状态的场景。
- Player Prefab :定义在服务器上创建玩家游戏对象的默认预制件。
- Player Spawn Menthod :决定在哪里生成新的玩家游戏对象。默认设置为随机。从场景中的所有NetworkStartPosition(组件) 确定玩家在哪个NetworkStartPosition生成。如果没有NetworkStartPostion组件,则默认生成位置为玩家预设体的位置
- Random 随机:随机选择的 NetworkStartPosition 生成玩家。
- Round Robin 循环:在集合列表中循环 NetworkStartPosition 生成玩家。
- Registered Spawnable Prefabs :使用此列表添加希望Network Manager(网络管理器)注意到的预制件,以便它可以生成它们。还可以通过脚本添加和删除它们。
Network ManagerHUD组件
Network ManagerHUD 可以简单快速提供一些基本功能来让游戏玩家托管联网游戏或查找和加入现有联网游戏,并提供简单的UI按钮。
Network Identity组件
是 Unity 网络高级 API 的核心;是一个游戏对象在网络上的唯一标识,使用该标识使网络系统知道该游戏对象。
- Server Only :只能在服务器上生成游戏对象而不能在客户端上生成
- Local Player Authonity :将此游戏对象的网络控制权授予拥有它的客户端。该客户端上的玩家 GameObject 对其拥有权限。其他组件(例如 Network Transform)需要使用它来确定将哪个客户端视为授权来源。
Network Transform组件
Network Transform 组件在网络中同步游戏对象的移动和旋转。请注意,Network Transform 组件仅同步已生成的联网游戏对象。
- Network Send Rate (seconds):设置每秒的网络更新数。对于在创建后不需要更新的游戏对象,比如玩家生成的非交互式效果(例如,玩家身后的无法交互的尘埃云团),可以将此滑动条设置为 0。
- Transform Sync Mode选择此游戏对象上应发生的同步类型。
- Sync None:不同步。
- Sync Transform:使用游戏对象的变换组件进行同步。如果物理系统不控制此游戏对象(即,通过脚本或动画移动游戏对象的情况下),请使用此选项。这是默认选项。
- Sync Rigidbody 2D:使用 Rigidbody2D 组件进行同步。如果 2D 物理系统控制此游戏对象,请使用此选项。
- Sync Rigidbody 3D:使用 Rigidbody 组件进行同步。如果 3D 物理系统控制此游戏对象,请使用此选项。
- Sync Character Controller:使用 Character Controller 组件进行同步。仅当使用 Character Controller 时才选择此选项。
NetworkStartPosition组件
在创建玩家对象时,NetworkManager 将使用 NetworkStartPosition。NetworkStartPosition 的位置和旋转用于放置新创建的玩家对象。
API
NetworkBehaviour
使用NetworkBehaviour 脚本处理具有 Network Identity 组件的游戏对象。这些脚本可以执行高级 API 函数,例如 Command、ClientRPC、SyncEvent 和 SyncVar。
- NetworkBehaviour 脚本具有以下功能:
- 同步变量
- 网络回调
- 服务器和客户端函数
- 发送命令
- 客户端 RPC 调用
- 联网事件
- 几种特性:1.Command;2.Syncvar;3.ClientRpc
- Command 通过客户端来触发服务端中的代码,要在服务器上执行的代码,此命令是客户端在服务器上触发某些代码的唯一方式;只有玩家游戏对象可以发送命令。需要加Cmd前缀;
- Syncvar 可以将 NetworkBehaviour 脚本的成员变量从服务器同步到客户端。服务器在这个系统中具有权威性,所以同步只发生在服务器到客户端的方向上。同步变量可以是任何基本类型。
- Syncvar[hook="方法名"] :声明一个方法当同步值改变时调用,该方法应该有一个与同步变量类型相同的参数。以便传递同步变量
- ClientRpc 使服务器游戏对象进行的操作发生在客户端游戏对象上的一种方式。客户端 RPC 调用不限于玩家游戏对象,并且可以在任何具有网络标识组件的游戏对象上调用。需要加Rpc前缀;
- 内置的回调函数:
- OnStartServer - 在服务器上生成游戏对象时调用,或者在场景中为游戏对象启动服务器时调用
- OnStartClient - 在客户端上生成游戏对象时调用,或者在客户端为场景中游戏对象连接到服务器时调用
- OnSerialize - 调用此回调可收集要从服务器发送到客户端的状态
- OnDeSerialize - 调用此回调可在客户端上将状态应用于游戏对象
- OnNetworkDestroy - 在服务器销毁游戏对象时在客户端上调用
- OnStartLocalPlayer - 在客户端上针对本地客户端上的玩家游戏对象调用(仅限本地客户端)
- OnRebuildObservers - 在重新构建游戏对象的观察者集合时在服务器上调用
- OnSetLocalVisibility - 当游戏对象的可见性对本地客户端而言更改时在客户端和/或服务器上调用
- OnCheckObserver - 在服务器上调用以检查新客户端的可见性状态
当其中一个客户端同时充当主机和客户端时,OnStartServer 和 OnStartClient会在同一个游戏对象上调用。