【Unity】FindObjectsOfType系列函数及“吃碎片”问题的解决

更新:

今天想到了一个更简单的办法:实时监测场上所有白色碎片的总数,若为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.面对积累少的问题,一方面要多看案例。另一方面,还应该有计划地学习引擎类。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值