Mirror是什么
- 看mirror官网或者其仓库中的说明进行了解。
- Mirror官网介绍https://mirror-networking.com/
- Mirror在Github上的仓库https://github.com/vis2k/Mirror
- Mirror在Gitee上的镜像仓库https://gitee.com/geo/Mirror
如何学习Mirror
- 仓库的doc文件夹里有相当详细的对Mirror的功能特色介绍。
- 在本机克隆Mirror的GIT仓库(github慢,就用gitee的镜像),或者直接从Unity商店下载。
- 将Mirror置入Unity项目后,查看Example(从Basic看起)。
Mirror/Examples/
- 阅读案例中的README.md(如果有的话)。
- 用VS或VSCode等代码编辑器打开案例代码,利用代码提示功能了解Mirror的api及修饰符的作用(Mirror做了很详细的注解)。
通过代码提示学习mirror
(英文没问题的话,以上的学习方法应该足够将mirror学习到应用程度了。以下会将我学习mirror时的重点记录下来,仅针对本人。)
Mirror官方文档浏览
Mirror功能特性简介。
支持的几种传输协议介绍。
https://gitee.com/geo/Mirror/blob/master/doc/Transports/index.md
验证
https://gitee.com/geo/Mirror/blob/master/doc/Components/Authenticators/index.md
- 一个简易的基于用户名密码的验证组件。
https://gitee.com/geo/Mirror/blob/master/doc/Components/Authenticators/Basic.md
客户端服务端交互事件
- 了解此信息有助于自定义联机细节。
笔记
极其重要的组件
- NetworkManager
- NetworkBehaviour
https://gitee.com/geo/Mirror/blob/master/doc/Guides/NetworkBehaviour.md
- NetworkIdentity,此组件似乎最为核心,很多网络事件均由此组件触发。
服务器端及客户端均有效
[SyncVar(hook=nameof(FunctionExecOnClient))]
- 用来修饰一个变量,此变量由服务器变更,同步到各个客户端,客户端可以添加hook以响应变量的变更。
- hook的原型为 function(oldValue, newValue)
仅服务器端有效
NetworkBehaviour.OnStartServer()
- 游戏对象在服务端准备就绪后调用。
NetworkBehaviour.connectionToClient
- 从服务器端获取客户端的信息。
[ServerCallback]
- 修饰仅在服务器端执行的方法。
仅客户端有效
NetworkBehaviour.OnStartClient()
- 当一个网络对象在服务器端网络就绪后,它在各个客户端的同步对象上都会调用此方法。
NetworkBehaviour.OnStartLocalPlayer()
- 类似OnStartClient(),但仅在属于本机的同步对象上调用此方法。
网络启动过程
- [Client]NetworkManager.OnStartClient()
- [Client]NetworkManager.OnClientConnect(conn)
- [Client]NetworkBehaviour.OnStartClient() 目前所有的连接都被调用一次
- [Client]NetworkBehaviour.OnStartAuthority() 仅本地连接
- [Client]NetworkBehaviour.OnStartLocalPlayer() 进本地连接
- [Client]NetworkBehaviour.SyncVar
断开时
- [Client]NetworkManager.OnStopClient()
未整理记录
客户端启动过程
- [Client&Local]NetworkManager.StartClient(),可以向服务器发起连接请求。
- [Client&Local]NetworkManager.OnStartClient(),在连接成功后被调用。
- [Client&Local]NetworkManager.OnClientAuthenticated(),被授权后被调用。
- [Client&Local]NetworkManager.OnClientConnect(conn),成功授权后调用。
- [Client&Owner]NetworkBehaviour.OnStartAuthority(),本机为同步对象拥有者时调用。
- [Client&All]NetworkBehaviour.OnStartClient(),任何同步对象初次到达任何客户端,先调用此方法。
- [Client&Owner]NetworkBehaviour.OnStartLocalPlayer(),本机为同步对象拥有者时调用。
调试
- 可以多开的脚本(mac)
i=8; while (($i>0)); do open -n /Users/traceqxr/DEVs/LABs/Unity/UnityLab/Builds/MirrorNetworkingLab.app; ((i=$i-1)); sleep 0.1; done;
网友评论