zhouqijie

序、uNet概述

uNet和uGUI一样都是Unity自带的模块。

Zhihu:uNet适合小型游戏和局域网游戏。大型多人游戏可以使用Photon服务器。

一、uNet基本组件

【Network Manager组件】

核心管理组件,进行网络连接。

属性:

Spawn Info:


【Network Manager HUD组件】

显示Network Manager相关的UI。用于和NetworkManager交互和测试。


【Network Identity组件】

有Network Identity组件的GameObject即网络物体。


属性:


【Network Start Position组件】

组件用于标识出生点。在Network Manager中选择Player Spawn Method.

【Network Transform组件】

负责将本地对象的Transform同步到其他客户端。

对于本地玩家授权的网络物体,只能从本地的对象同步到其他客户端,不能将非本地对象同步到其他客户端。

属性:

二、NetworkBehaviour方法

(需要有NetworkIdentity组件)

public override void OnStartLocalPlayer()

该方法只在本地角色被创建时调用。可以在方法体中对本地玩家角色进行标识。

public override void OnStartServer()

启动服务端时触发。可以用于生成AI角色和网络物体。


三、同步玩家角色

添加NetworkIdentity组件和NetworkTransform组件,设置合适参数。

四、生成/同步其他网络物体

关于生成和同步:

使用[Command]在服务端生成。

使用NetworkServer.Spawn()将物体同步到所有客户端。

也需要添加NetworkTransform组件。(有时只需要同步一次即可,例如子弹等只需要在设置速度后同步一次刚体。)

添加到NetworkManager的Registered Spawnable Prefabs列表。

关于销毁:

服务端生成的网络物体,如果在服务端销毁会同步到所有客户端,如果在客户端销毁则不会影响到服务端。

所以建议在服务器销毁物体。


补充:应该在服务端进行重要计算

碰撞检测以及重要的数值计算应该放在服务端进行,防止出现问题。

然后给字段加上[SyncVar]特性把数值同步到客户端。

注意事项:

对于远程客户端本地玩家授权的对象,服务端无授权,不能直接修改,需要使用远程过程调用。


补充:相关特性

[SyncVar]

用于实现变量同步。

可以使用[SyncVar(hook="OnChangedFoo")]来设置值改变时的回调函数。该函数的参数为变量当前值。

[Command]

在客户端调用此方法,会在服务器上运行此方法。(必须以前缀”Cmd”开头)

[ClientRpc]

远程过程调用(Remote Process Call)。该方法在客户端调用。(必须以前缀”Rpc“开头)