69. 2023-07-16周总结

  1. 小游戏充值流程,android和ios
  2. 模拟经营剧情动画
  3. jenkins问题
  4. 新手引导问题
  5. 算法优化

1. 小游戏充值流程

微信小游戏没有办法使用微信支付接口,只能使用它的虚拟支付,但是这个支付使用的流程跟其他支付不太一样,需要把货币存储在它那边。而且看了下后台设置,只能存储一个货币,诸如月卡,或者花钱购买礼包不太好支持。好在虚拟支付支持充值成功回调(文档地址),于是舍弃它存储货币的功能,利用它的回调接口通知服务器,服务器校验之后把钻石加到服务器本地。

这样做的好处是与一般的充值流程统一,唯一的问题是虚拟支付不支持查询订单功能,如果回调服务器接口出问题可能会导致丢单。

另外虚拟支付只支持android,ios因为苹果与微信之前的问题,得走另外一套比较奇怪的流程。ios小游戏充值的时候首先小游戏利用接口拉起客服会话,然后用户给客服发送一条充值消息。服务端利用客服消息回调机制(文档)接收到发送过来的充值消息,然后返回一个H5链接,在H5里面利用微信支付接口拉起微信支付。支付成功之后再利用支付成功回调(文档地址)通知服务端加钻石。

ios充值整个流程中间会比一般充值流程多了几步(拉起客服,接收客服消息,发送充值链接),但后续的充值流程与一般的充值流程统一。

2. 模拟经营剧情动画

模拟经营需要支持剧情动画,动画过程比较简单,小人移动,播放动作,摄像机聚焦,跟随,震动等。参考之前技能的Timeline机制,在这边也实现了一套,每个人身上有一条时间线,各自在自己的时间节点里做自己的事情即可。为什么不用Unity的Timeline,主要考虑开发成本,一个是Timeline的移动需要自己K帧,自己写的话可以用DOTween比较灵活,另外一些摄像机的聚焦,跟随,震动等也需要额外的工作量把这个嵌入到Unity的Timeline中。还有一个原因就是,后续这样做可以比较容易支持策划配表(虽然目前是程序写死的)。

3. jenkins问题

主要遇到两个问题:

  1. 编码问题,console输出的中文一直是乱码,查了一些资料修改编码,看到环境变量里面编码格式已经改过来了,但是还是显示乱码。目前没找到解决方案
  2. jenkins利用gitlab push触发进行build,但是发现jenkins自己的提交也会导致再次Build,查了下相关资料,开启jenkins git trigger设置里面的高级设置的Enable [ci-skip],然后在jenkins自动提交的commit消息里面以[ci-skip]开头即可

4. 新手引导问题

项目在做新手引导的时候遇到几个结构上的问题:

  1. 如何更简单的写强退之后新手引导恢复的代码
  2. 新手引导如何避免要引导的这一操作已经在引导开始之前被完成了,例如本来要引导造一个建筑,但是玩家在不知情的情况下已经把这个建筑造了。
  3. 如何比较方便的在新手引导中间插入一步或者删除一步引导

后续和其他同学一起讨论下新手引导改怎么设计好。

5. 算法优化

模拟经营的寻路以及地块创建那边比较卡,抽时间看了下这块的Profiler,发现几个问题:

  1. 寻路各自用的是整数的坐标,但是我们用的Vector2存储
  2. 遍历Dictionary用的是for (int i = 0; i < dic.Count; ++i) var item = dic.ElementAt(i); (黑人问号脸??)
  3. 常用的class改成struct减少GC
  4. Dictionary存储自定义结构的时候增加自定义Compare函数,减少Dictionary的查找耗时(原先是利用Dictionary的ElementAt函数一个个查找(再次黑人问号脸??))
  5. 函数需要返回的list,dict用静态变量存储,减少GC

优化之后整个提升非常明显,同时猜测因为Vector2改成Vecctor2Int作为中间计算过程的原因,不会出现人物斜着走的时候路径不太正确的现象。