Unity C#判断场景对象不存在时日志输出异常问题排查
问题原因
- 代码执行顺序错误触发空引用中断:你将距离计算逻辑写在了对象存在性判断之前,当场景中不存在
Player_1对象时,GameObject.Find("Player_1")会返回null,此时直接访问_objeto1.transform会立刻抛出空引用异常,后续的if/else分支完全不会执行,自然无法输出"no"日志。 - 存在多处语法、逻辑错误:
- 类结构不完整,类声明段截断,无法正常编译
- 直接将
GameObject类型与布尔值true做相等判断,属于无效写法 - 日志输出内容与需求不符,原代码输出的
sim/nao并非要求的yes/no
- 存在性能隐患:
GameObject.Find是高开销API,放在Update中每帧执行会产生不必要的性能消耗,非动态生成的对象应当在初始化阶段完成引用获取。
修复后的完整代码
using UnityEngine; public class ObjectCheck : MonoBehaviour { public GameObject _objeto2; private GameObject _objeto1; private float _distancia1; void Start() { _distancia1 = 0f; _objeto1 = GameObject.Find("Player_1"); } void Update() { // 先判空再执行依赖对象的逻辑,避免空引用报错 if (_objeto1 != null) { _distancia1 = Vector3.Distance(_objeto1.transform.position, _objeto2.transform.position); Debug.Log("yes"); } else { Debug.Log("no"); } } }
补充提示
如果需要实时检测Player_1是否被动态销毁/移除,可以将查找逻辑放回Update,但建议增加0.5s左右的查找间隔,避免每帧执行Find带来的性能损耗。
内容的提问来源于stack exchange,提问作者tsuyu
相关产品推荐
相关产品推荐

