Unity访问同一GameObject挂载的其他脚本变量报错如何解决
Unity跨脚本访问报错修复方案
错误原因
- 组件获取逻辑时机错误:C#类的成员变量初始化执行优先级远高于Unity的生命周期方法
Awake、Start,此时go变量还未完成赋值,调用go.GetComponent必然触发空引用异常。 - 潜在的访问权限问题:若
idkhorsey脚本中的isAlive变量未使用public修饰符,跨脚本访问会触发权限报错。
修正后的代码
using UnityEngine; public class idkh2 : MonoBehaviour { // 仅声明变量,不执行获取逻辑 private idkhorsey ih; void Start() { // 同对象挂载脚本可直接从当前gameObject获取组件,无需额外声明GameObject变量 ih = GetComponent<idkhorsey>(); // 增加非空判断避免异常 if (ih != null) { print(ih.isAlive); } else { print("当前对象未挂载idkhorsey脚本"); } } void Update() { } }
额外配置要求
在idkhorsey脚本中修改isAlive变量的修饰符为公共:public bool isAlive;
内容的提问来源于stack exchange,提问作者yunum
相关产品推荐
相关产品推荐

