unity ui解决方案新玩法-Blazor 2.客户端场景和UI要能够存在一一绑定关系且有重连机制需求的实现

上一篇链接
这篇随笔是当前系列第二篇,详细说明客户端场景和UI要能够存在一一绑定关系且有重连机制需求的实现步骤。

1. 需求流程图

2. 具体实现步骤

2.1. 新建unity项目

  • 点开unity hub,新建一个项目
  • 设置项目版本和模板,当前使用2022.1.0b16版本下的URP示例模板
  • 打开Package Manager,导入Embedded Browser(一个实现了嵌入浏览器的资源包,类似包还有很多)和Best HTTP/2(一个封装了更优雅方便的网络接口资源包)

2.2. 实现第一步:生成客户端Id

  • 创建一个类ClientStateManager,继承MonoBehaviour,在Awake生命周期函数中生成对应的id
  • 新建一个空的gameobject,将ClientStateManager以组件方式添加

2.3. 实现第二步:启动HubConnection后发起连接,将客户端Id发送到Hub

  • 点开rider,新建一个项目,Type选用Blazor Server App
  • 完善客户端相关代码,
  • 完善服务端相关代码并启动客户端进行测试,

2.4. 实现第三步:Hub将对应连接放入组中,组名为客户端Id

  • 完善服务端相关代码,

2.5. 实现第四步:定期Ping服务端

  • 完善客户端相关代码,
  • 完善服务端相关代码,

2.6. 实现第五步:服务端回复Ping

  • 完善服务端代码,

2.7. 实现第六步:场景带上客户端Id进行访问

  • 客户端新建Canvas,并新建一个它的子物体,添加对应组件并完善属性,
  • 完善客户端代码,
  • 将页面组件拉入ClientStateManager的webPage属性中,

2.8. 实现第七步+第八步:页面缓存Id,并返回

  • 完善服务端代码,
  • 运行客户端,此时应该显示current clientId:xxx而不是xxx is invalid clientId!

2.9. 实现第九步:用户手动重刷页面

  • 添加一个按钮,点击事件添加与ClientStateManager的ReloadUI方法绑定
  • 运行客户端并测试按钮功能,每次重新刷新都会触发新的页面与服务端连接

2.10. 实现第十一步:场景检测到自身与Hub断开

  • 设置较短的超时检测时间和重连时间,关闭Ping消息

2.11. 实现第十二步:HubConnection重连成功后将客户端Id发送到Hub

  • 设置重连时间和事件

    *运行验证场景HubService与服务端Hub重连

3. 结尾的话

至此,场景与UI一一绑定关系并拥有重连机制的需求就完成了。运行验证后记得将Ping消息重新打开,祝各位看官顺利实现需求。
下一篇链接