更新:
今天想到了一个更简单的办法:实时监测场上所有白色碎片的总数,若为0,则胜利。
原文:
游戏规则是:
如果玩家将场上所有白色碎片都吃掉,则胜利。
所以,首先要获得场上所有白色碎片的总数,然后实时比对玩家吃掉的碎片数量,如果>=则胜利。
就这样一个简单的问题我却碰到了非常多的Bug:
1.计算碎片总数:
(1)不知道FindObjectsOfType系列函数:
使用了transform.GetComponentsInChildern()函数,这就对分散在场景不同物体下面的碎片计数制造了困难。
对特殊的例子我放弃了代码,进行手动数,也是非常容易出Bug的,而且一旦有变动,人脑子根本记不住啊。排查起来也非常麻烦。为了规避问题,甚至搞了一个FoodCount的变量,如果它为0,并且满足吃掉的碎片大于总数时胜利。有一定的补救作用,但不治本啊。
(2)使用了FindObjectsOfType<FoodAdhere>():
发现这个函数只能拿到场景中处于active状态的物体,总数比实际的少,不行。
(3)使用了Resources.FindObjectsOfTypeAll(typeof(FoodAdhere))函数:
的确也可以取到处于inactive状态的物体,但是测试中发现,它同时也取到了Assets中的prefab,所以总数比实际的多,不行。
(4)发现并不是所有目标物体都绑定了脚本。
2.计算玩家吃掉的碎片数量:
(1)OnTriggerEnter函数面对同一个物体执行多次,导致多次计分。
刚开始我没往这个方向想,但是两个数字就是对不上。如果说我确保场景中的碎片总数是正确的,那一定是计分出现了问题。
在计分时先判断是否和上个物体相同,不同再计分。
总结:
1.同一个问题有多个变量时,要逐个排查每个变量是否正确。
2.不要投机取巧,而要彻底解决问题。
3.面对积累少的问题,一方面要多看案例。另一方面,还应该有计划地学习引擎类。