unity运行过程中销毁物体导致引用缺失

17 篇文章 0 订阅
16 篇文章 0 订阅

MissingReferenceException: The object of type 'MonsterFish' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

问题产生背景:

丑小鸭走到碰撞体的时候,会被鱼的碰撞体做碰撞检测,然后调用鱼的攻击方法。脚本放在碰撞体的空物体上,引入了鱼。丑小鸭会发射子弹干掉鱼。

所以在子弹把鱼干掉后,碰撞体里面对鱼body的引用就缺失了,报错。所以问题解决方法就是,销毁的不是鱼,而是鱼的父物体,就会连同碰撞体一起销毁。问题解决

Unity销毁物体的计数可以通过以下几种方法实现。 第一种方法是使用变量进行计数。我们可以使用一个整型变量来记录销毁物体数量。当需要销毁一个物体时,将计数值加一。例如,在销毁一个物体的函数,可以使用一个整型变量count来记录销毁物体数量,代码如下: ``` int count = 0; void DestroyObject(GameObject obj) { Destroy(obj); count++; } ``` 第二种方法是使用静态变量进行计数。静态变量是指在类声明的变量,可以在类的所有实例之间共享。我们可以在一个类声明一个静态整型变量来记录销毁物体数量。当需要销毁一个物体时,将静态计数值加一。例如: ``` public class ObjectManager : MonoBehaviour { public static int count = 0; public void DestroyObject(GameObject obj) { Destroy(obj); count++; } } ``` 使用上述方法,我们可以在其他地方通过访问count变量来获取销毁物体数量。 第三种方法是使用Unity的计时器来实现。我们可以使用Invoke函数在一定时间后执行一个特定的方法,通过该方法来统计销毁物体数量。例如: ``` float delay = 5.0f; // 设置一个延迟时间,例如5秒 void DestroyObject(GameObject obj) { Destroy(obj); Invoke("CountObjects", delay); } void CountObjects() { int count = GameObject.FindObjectsOfType(typeof(GameObject)).Length; Debug.Log("销毁物体数量:" + count); } ``` 以上是三种常用的计数方法,使用任何一种都可以实现统计Unity销毁物体的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值