Network manager:unity官方提供联网组件
可以指定player prefab:即每连入一个客户端就生成一个player prefab
Network manager HUD:用来显示左上角UI
Network Identity:局域网的标识符
Server only 只存在于服务器端
Local player authority:每一个都有
Network Transform :用来同步位置(通过当前player来同步到其他客户端上)
Ctrl+ D build and run一个版本
unityEngine.Networking
平常一个脚本类是继承自MonoBehavior,网络的类的话得继承NetBehavior,因为这个类有一个静态方法:isLocalPlayer,用来判断是不是本地玩家,以防止操作混乱,isSever用来判断是不是服务器端
Public override void OnStartLocalPlayer()//这个方法只会在本地角色调用,在角色被创建的时候
Networksever的静态方法spawn()可以生指定物体同步到各个客户端
Networktransform组件可以同步transform 和 刚体组件
血条的展示:
Canvas->Slider :
Background:背景色
FIll Area->FIll:拖动之后的颜色
Handle Side Area:托条
做血条的时候托条不需要,直接删除,拖动之后的颜色无法填充慢整个条,需要吧Fill Area->Fill拖动到Background下面,然后把Fill Area删除掉,找到FIll的Rect Transform的锚点对齐,按alt+右下角的来对齐
相关检测,逻辑判断等只在一个端口检测(客户端或者服务器端)不然,比如服务器端检测到了后执行相应的操作同步到客户端会造成不想要的结果
子弹生成应该在服务器端生成然后同步到客户端,需要在子弹的prefab上添加network identity 然后拖到network manager上的prefab list 在函数头上面添加[Command]说明旨在服务器端调用,函数必须以cmd开头
服务器端如何同步?
在需要同步的变量前添加[SyncVar]的字段,让该变量拥有同步的属性
[SyncVar(hook = “方法名”)]当被检测的变量(需要同步的变量)的值发生改变的时候调用该方法,在每个客户端都会进行调用
[ClientRpc]表示方法在客户端调用,该方法必须以Rpc开头
跟角色有关的用localPlayer来处理用其他客户端来同步
一个脚本挂在不同用处的的对象上是,如要区分,可加入一个publuic布尔变量,在需要执行的一方勾选