69. 2023-07-16周总结
- 小游戏充值流程,android和ios
- 模拟经营剧情动画
- jenkins问题
- 新手引导问题
- 算法优化
1. 小游戏充值流程
微信小游戏没有办法使用微信支付接口,只能使用它的虚拟支付,但是这个支付使用的流程跟其他支付不太一样,需要把货币存储在它那边。而且看了下后台设置,只能存储一个货币,诸如月卡,或者花钱购买礼包不太好支持。好在虚拟支付支持充值成功回调(文档地址),于是舍弃它存储货币的功能,利用它的回调接口通知服务器,服务器校验之后把钻石加到服务器本地。
这样做的好处是与一般的充值流程统一,唯一的问题是虚拟支付
不支持查询订单功能,如果回调服务器接口出问题可能会导致丢单。
另外虚拟支付
只支持android,ios因为苹果与微信之前的问题,得走另外一套比较奇怪的流程。ios小游戏充值的时候首先小游戏利用接口拉起客服会话,然后用户给客服发送一条充值消息。服务端利用客服消息回调机制(文档)接收到发送过来的充值消息,然后返回一个H5链接,在H5里面利用微信支付接口拉起微信支付。支付成功之后再利用支付成功回调(文档地址)通知服务端加钻石。
ios充值整个流程中间会比一般充值流程多了几步(拉起客服,接收客服消息,发送充值链接),但后续的充值流程与一般的充值流程统一。
2. 模拟经营剧情动画
模拟经营需要支持剧情动画,动画过程比较简单,小人移动,播放动作,摄像机聚焦,跟随,震动等。参考之前技能的Timeline机制,在这边也实现了一套,每个人身上有一条时间线,各自在自己的时间节点里做自己的事情即可。为什么不用Unity的Timeline,主要考虑开发成本,一个是Timeline的移动需要自己K帧,自己写的话可以用DOTween比较灵活,另外一些摄像机的聚焦,跟随,震动等也需要额外的工作量把这个嵌入到Unity的Timeline中。还有一个原因就是,后续这样做可以比较容易支持策划配表(虽然目前是程序写死的)。
3. jenkins问题
主要遇到两个问题:
- 编码问题,console输出的中文一直是乱码,查了一些资料修改编码,看到环境变量里面编码格式已经改过来了,但是还是显示乱码。目前没找到解决方案
- jenkins利用gitlab push触发进行build,但是发现jenkins自己的提交也会导致再次Build,查了下相关资料,开启jenkins git trigger设置里面的高级设置的Enable [ci-skip],然后在jenkins自动提交的commit消息里面以[ci-skip]开头即可
4. 新手引导问题
项目在做新手引导的时候遇到几个结构上的问题:
- 如何更简单的写强退之后新手引导恢复的代码
- 新手引导如何避免要引导的这一操作已经在引导开始之前被完成了,例如本来要引导造一个建筑,但是玩家在不知情的情况下已经把这个建筑造了。
- 如何比较方便的在新手引导中间插入一步或者删除一步引导
后续和其他同学一起讨论下新手引导改怎么设计好。
5. 算法优化
模拟经营的寻路以及地块创建那边比较卡,抽时间看了下这块的Profiler,发现几个问题:
- 寻路各自用的是整数的坐标,但是我们用的Vector2存储
- 遍历Dictionary用的是
for (int i = 0; i < dic.Count; ++i) var item = dic.ElementAt(i);
(黑人问号脸??) - 常用的class改成struct减少GC
- Dictionary存储自定义结构的时候增加自定义Compare函数,减少Dictionary的查找耗时(原先是利用Dictionary的ElementAt函数一个个查找(再次黑人问号脸??))
- 函数需要返回的list,dict用静态变量存储,减少GC
优化之后整个提升非常明显,同时猜测因为Vector2改成Vecctor2Int作为中间计算过程的原因,不会出现人物斜着走的时候路径不太正确的现象。