博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
“疑难杂症”又二记
阅读量:4224 次
发布时间:2019-05-26

本文共 1929 字,大约阅读时间需要 6 分钟。

“疑难杂症”又二记

0. 引子

  近来工作又遇到一些“疑难杂症”,在此简单记下,自省省人 ~

 

1. 都是WaitForSeconds 惹的祸 ~

 

  目前开发的游戏很多地方都用到了,个人感觉还是挺不错的(题外话,Hotween的第二版应该也快正式Release了,各种改进令人期待 :)),推荐有兴趣的朋友试试,虽说自己感觉Hotween的使用还挺顺畅,不过小坑还是踩到了一个:

 

  对于一些连续的tween效果,使用Hotween + yield return new WaitForSeconds的组合方式个人感觉还是挺容易理解的,于是项目中的不少地方都出现了类似下面这种形式的代码:

 

  Hotween.To(<effect run duration time>);

  yield return new WaitForSeconds(<duration time>);

  Hotween.To(...);

 

  大部分情况下,上面的代码都运行的很好,但是在极少数的情况下(真机测试下情况尤甚),会出现动画(tween)出错的情况,而且极难重现,非常随机,自己断断续续的查了好久,设想了不少可能原因,也依此做了不少Fix,心里依然觉得惴惴不安,因为个中“病根”自己并没有找到,后来又经过了不少测试才算找到了些门路,“顺藤摸瓜”式的总算“确诊”了病因,原来这一切都是惹的祸 :)

 

  自己大概学习过一些Hotween的实现源码,原理上来说还是挺传统的,大概就是通过一个Update来不断更新由Hotween.To或者FromAPI产生的ABSTweenComponentHotween中的TweenerSequence都继承于他),当然个中细节很多,在此就不一一赘述了,值得一提的就是Hotween在时间相关的逻辑上大抵都仰仗于Unity中的,也就是说,如果拿上面的代码举例:

  

  Hotween.To(<effect run duration time>);

 

  其中动画(tween)的时间durationHotween大抵上便是由Time.time - tweenStartTime这类形式来加以控制的,这种控制方式很直观,一般来讲也没什么问题,但是结合上WaitForSeconds就出岔子了……

  

  问题出在WaitForSeconds的计时方式与Hotween的计时方式并不相同!(如何不同我并不十分清楚,有了解的朋友不妨告之一下)“天真的”猜测一下,我估摸着很有可能WaitForSeconds的计时要略快于Hotween的计时,也就是说,如果WaitForSeconds显示时间已经过去了1sHotween这方可能仍然觉得时间只经过了0.9s……当然,实际程序运行中两者的差距远没有如此夸张,但是不会一致基本上是肯定的,而当两者的差距偶尔偏大,譬如说超过一帧时,“诡异”的动画问题可能就会出现了,考虑上述代码:

  

Hotween.To(<effect run duration time>);

yield return new WaitForSeconds(<duration time>);

// previous tweener could still running ……

Hotween.To(...);

 

  虽然你使用WaitForSeconds等待了duration时间,但实际上相对Hotween而言,duration时间还没有到(感觉颇有些相对论的味道 :)),动画仍然会在yield之后继续运行,这与你代码的逻辑假设是相悖的,自然就会出现或这或那的奇怪问题……

 

  基于此,我改变了一下动画的控制方式,代码大概是这个样子:

 

  bool isTweenEnd = false;

  Hotween.To(<effect run duration time when end it will set “isTweenEnd” to true>);

  while (!isTweenEnd) {

      yield return null;  

  }

  Hotween.To(...);

 

  此番改动之后,之前各种奇怪的动画问题总算是“消停”了,呼……

 

2.WTFAndroid版本随机崩溃!?

 

  目前将游戏发布了一个Android测试版本,在Galaxy NoteAndroid 4.1.1)上跑的还算可以,但是放到红米NoteAndroid 4.4.2)上就各种崩溃(几乎是“随时随地”Crash),日志上看大抵就是一个段错误,实在是令人费解,几番google、多方尝试之后,才算找到了一个Fix方案:

  

  

 

  这里有个细致(上面的截图也来自于此),有兴趣的朋友可以看看 :)

 

  OK,就这些了 ~

你可能感兴趣的文章
在自然语言处理领域,哪些企业的发展遥遥领先?(附报告)
查看>>
英雄联盟如何指挥团战?AI帮你做决策(附资源)
查看>>
干货 | 基于贝叶斯推断的分类模型& 机器学习你会遇到的“坑”
查看>>
手把手教你生成对抗网络 GAN,50 行代码玩转 GAN 模型!(附源码)
查看>>
带你和Python与R一起玩转数据科学: 探索性数据分析(附代码)
查看>>
不挡脸,放肆看!揭秘B站黑科技蒙版弹幕
查看>>
115页Slides带你领略深度生成模型全貌(附PPT)
查看>>
干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
查看>>
干货 | 一文总结机器学习类面试问题与思路
查看>>
15篇最新AI论文推荐新鲜出炉!真的很skr了~(附链接)
查看>>
教你用Python解锁“吃鸡”的正确姿势!(附240行代码)
查看>>
收藏 | 200个精选ML、NLP、Python及数学最佳教程(附链接)
查看>>
一文带你入门图论和网络分析(附Python代码)
查看>>
对话清华大学周昊,详解IJCAI杰出论文及其背后的故事
查看>>
干货 | NLP、知识图谱教程、书籍、网站、工具...(附资源链接)
查看>>
独家 | 一文读懂如何用深度学习实现网络安全
查看>>
用这种方法实现无监督端到端图像分类!(附论文)
查看>>
10大称霸Kaggle的深度学习技巧(附课程&代码&论文)
查看>>
干货 | 6 种激活函数核心知识点,请务必掌握!
查看>>
TensorFlow超级指南 | 你能想到的TF教程和资源都在这里(附链接&视频)
查看>>