Unity中C#类实例为Null致变量无法修改,求解决办法?
问题
- 我创建了一个玩家生命值类,其中定义了
public int类型的health变量 - 在另一个类中尝试修改该变量时没有效果,添加
Debug.Log语句检查后发现该类实例为Null(注:类引用和类内health变量重名,代码存在混乱)
修复办法
- 修正变量重名问题:立即修改类引用的变量名,比如将
public PlayerHealth health;改为public PlayerHealth playerHealth;,彻底避免变量名冲突导致的逻辑混乱。 - 正确初始化类实例:
- 编辑器赋值:在Unity Inspector面板中,把挂载了玩家生命值脚本的游戏对象拖入对应的引用变量框,确保引用不为空。
- 代码获取:如果场景中存在该对象,在脚本的
Start()方法中通过以下方式获取实例:
要是对象是动态生成的,需在生成后立即获取其组件引用,或者在生成时传递实例。void Start() { playerHealth = FindObjectOfType<PlayerHealth>(); // 或者通过对象名称查找 // playerHealth = GameObject.Find("Player").GetComponent<PlayerHealth>(); }
- 检查脚本挂载状态:确认玩家生命值脚本已经正确挂载到场景中的游戏对象上,且对象未被禁用。
- 调整初始化时机:如果在
Awake()中获取引用导致为空,可将获取逻辑移至Start(),或者在Project Settings的"Script Execution Order"中调整脚本执行顺序,确保先初始化玩家生命值类。
内容的提问来源于stack exchange,提问作者Socket
相关产品推荐
相关产品推荐

