UNet笔记
添加一个unet的管理器 Networkmanager
在Spawn Info中可以设置当一个客户端连接进来的时候生成一个预设
Network Identity: 网络标识组件,需要同步的物体都必须添加这个组件
NetworkTransform组件: 添加后会同步位置信息
Networkmanager下的Registered Spawnable Prefabs : 需要在服务器进行生成的物体(同步物体) 需要注册到这里 并且注册的物体需要有Network Identity(网络标识组件) (只在服务器生成)
服务器调用的脚本需要继承NetworkBehaviour
继承后:
可以使用父类中的字段 isLocalPlayer 来判断是否是本地客户端创建的自动生成物体 ,通过这个可以让只有为True的才能控制自己,否则会控制所有自动生成的物体,()可以用于筛选 输入的处理)
可以使用override OnStartLocalPlayer()来判断当前是否是本地客户端, 这个是方法,启动自动调用, 上边的是属性
在服务器中调用方法需要添加[Command]标签,并且这个方法名要以Cmd开头
如果需要在所有客户端都同步服务器生成的物体,需要添加NetworkServer.Spawn(Object o);方法
在服务器上处理类似血量,这样不会出现在服务器中如碰撞检测后将物体销毁了但是客户端还没有碰撞到(延时导致) 而引发服务器中血量减少但是客户端没有减少.解决办法:
同步字段
在需要同步的字段前边添加[SyncVar] 就可以同步字段了 ,当然这个脚本要继承NetworkBehavior
在这个字段同步后如果需要调用一个方法, 就可以 [SyncVar(hook =”OnChangeHealth”)]
这样在字段同步后会自动调用OnChangeHealth方法, OnChangeHealth必须要带有一个和字段类型一样的参数, 这个参数就是字段同步之后的值.
在服务器调用过的方法如果需要客户端再调用一遍的话需要在方法前边添加[ClientRpc] 方法要以Rpc开头 一般配合isLocalPlayer使用
OnStartServer() 当服务器启动时自动调用
添加空物体添加组件
可以通过修改这个属性修改是随机位置生成还是按照顺序生成