今天周日,只学了一个多小时看了视频十五。不过收获颇丰,尤其是照着教程写完,发现执行出来的效果不符合预期后,重新审视代码和对象,删除又重新创建,终于找到了问题所在。
前后经过大概是这样的,昨天学完以后,在自己尝试写计分的脚本,只是定义了一个score,不知道怎么从计分脚本中获取到击破asteroid的数量。今天的视频完全以一个初学者的角度来进行尝试:
1.首先先在GameController脚本中添加了AddScore也就是增加得分的函数,其中修改了得分后会调用UpdateScore函数来更新分数
2.然后直接在DestoryByContact也就是摧毁小行星的脚本里写了一句GameController.AddScore(10),尝试调用GameController类中的AddScore函数。结果是理所应当的报错了,里面的报错说明却是看得懂字理解不了意思。于是教程以一个生动的停车场的例子说明了调用的错误之处,声明了一个GameController类的gameController对象来修正错误。
看的一头雾水的报错说明3.接着对于gameController对象如何和Unity中对应的GameController进行绑定进行了详细的说明。定义一个gameControllerObject来储存通过FindWithTag找到的对象,只要能找到这个Tag,就把Tag里面的GameController类对象赋值给gameController,就能调用类方法了。
结构条理清晰的示例代码这段我说的比较绕,不过教程里讲得很清楚,深入浅出。这部分概念第一次接触,还比较陌生,多接触并且自己多写几次,应该就会比较清楚了。
原本以为这篇笔记要延期到明天了,结果照着教程写完以后,执行不成功!无奈躺下准备睡,脑子里却始终放不下这个问题,爬起来找问题。尝试Debug输出了score的值,发现是有按照预期增加的,可是text.text又没能把score赋值进去,猜想是组件出了问题,删了重新复制。
昨天写的代码,给今天挖了个大坑折腾了一番,终于找到症结所在:昨晚自己写的半成品,直接把得分写死成0了,也难怪不管怎么修改刚写的函数,显示的文字都不为所动。另一方面,因为我自己加了个坚持的时间,用了一个Mathf.Round(100 * Time.time) / 100函数,不能每次updateScore才刷新了,只好把它移到了update函数中,终于完美符合预期,安心睡觉。
2018.10.29 1:39
网友评论