以下视频均来自b站,无法停止奔跑的马https://space.bilibili.com/398331098
第一部分
https://www.bilibili.com/video/BV147411x7Q1?t=383
- 02:16 NetworkManager,Telepothy做网络整体配置。
- 04:52 NetworkIdentity,NetworkTransform,网络同步。
https://www.bilibili.com/video/BV1b7411x7h3
- 04:38 继承NetworkBehaviour,以便捷实用Mirror功能。
- 05:43 isLocalPlayer,判定是否本机用户。
- 09:50 NetworkTransform.ClientAuthority,勾选,否则客户机主动产生的变化信息无法同步所有网络。
https://www.bilibili.com/video/BV1f7411x7yX
- 05:35 重写OnStartServer(),相当于Start()。
- 07:22 [ServerCallback],标识由服务器调用的方法。
https://www.bilibili.com/video/BV1f7411x7gF
- 06:00 继承NetworkManager,重写OnServerAddPlayer(),以自定义角色创建过程(在有玩家加入服务器时)。
- 07:26 NetworkServer.AddPlayerForConnect(),将新建立的角色加入指定连接(可能来自客户端)。
- 10:21* NetworkManagerHUD,简易的界面。
- 14:17* NetworkTransform.NetworkSyncInterval,调整同步频度,可降低不同步程度(可能有的物体不需要太频繁的同步)。
- 14:29* NetworkManager.ServerTickRate,设置服务器更新速率,可降低不同步程度。
https://www.bilibili.com/video/BV1b7411s7Mr
- 07:14 需要网络创建的同步对象要先注册到NetworkManager的注册对象列表中。
- 09:19 通过Instantiate找到已注册对象,再用NetworkServer.Spawn()实例化此对象。
- 11:37 重写NetworkManager.OnServerDisconnect(),在有玩家退出时做一些事情。
- 12:17 NetworkServer.Destory(),销毁同步对象(由NetworkServer.Spawn创建的)。
第二部分
https://www.bilibili.com/video/BV127411j7zk
- 01:33 [SyncVar(hook=someFunction)] 可以将对变量的修改,触发一个hook方法的调用。
https://www.bilibili.com/video/BV1B741177mT
- 06:54 [Command] 修饰客户端调用,在服务器端执行的代码方法。
https://www.bilibili.com/video/BV157411A78s
- 07:18 NetworkStartPosition组件,用于初始位置标识?
https://www.bilibili.com/video/BV1j7411A7w1
- 03:30 OnStartLocalPlayer(),此方法在服务器端运行,其中设置修饰有[SyncVar]的变量,进而将数据同步到各个客户端。
https://www.bilibili.com/video/BV1j7411A7pd
- 02:03 通过NetworkManager的PlayerSpawnMethod配置玩家出生方式,而挂载了NetworkStartPosition的组件即为玩家出生的位置。
https://www.bilibili.com/video/BV1L7411A7mh
- 01:11 NetworkStartPosition的姿态会影响产生的玩家姿态。
- 03:36 貌似[SyncVar]用于标识需要同步的变量。
第三部分
https://www.bilibili.com/video/BV127411V7pG
- 3:41 [Command]修饰的方法要用Cmd开头,这类方法由客户端请求服务器执行。
https://www.bilibili.com/video/BV187411G7vQ
- 03:07 [ClientRPC]修饰由服务器请求各个客户端上执行的方法,以Rpc开头。
https://www.bilibili.com/video/BV187411G7WY
- 03:23 NetworkIdentity.ServerOnly,标识仅仅服务器端有效的对象。
https://www.bilibili.com/video/BV1x7411G71r
- 06:35 [ServerCallback]修饰仅在服务器端执行的方法。
https://www.bilibili.com/video/BV167411g7i5
- 04:37 [TargetRpc] 修饰指定目标机上执行的代码。
- 06:43 NetworkBehaviour.connectionToClient保存着到客户端的连接信息。
https://www.bilibili.com/video/BV1u7411374T
- 05:07 Mirror.Client.AddPlayer(),从客户端请求生成Player,重生用。
https://www.bilibili.com/video/BV137411378S
- 07:02 在[ServerCallback]方法中可通过NetworkIdentity.connectionToClient判断对象由哪个客户端请求创建的。
- 09:14 NetworkServer.Spawn()第二个参数指明生成的实例所隶属的对象。
总结
NetworkBehaviour
- 需要网络操作的脚本最好继承自NetworkBehaviour。
需要同步的游戏对象
- 通过NetworkIdentity和NetworkTransform构建需要同步的游戏对象(预制体)
同步对象的产生
- 应该尽在服务器端代码执行同步对象产生的操作。
- 先利用Instantiate产生同步对象预制体实例。
- 再通过NetworkServer.Spawn(inst)将这个实例的产生同步到整个网络。
同步对象的销毁
- 使用NetworkServer.Destroy(syncObj)销毁同步对象。
调用端与执行端
- [ServerCallback] 仅仅在服务器端执行的代码。
- [Command] Cmd开头,由某个客户端调用,服务器端执行。
- [ClientRpc] 由服务器端调用,在所有客户端执行。
- [TargetRpc] 由服务器调用,仅在指定客户端执行。