Unity/C#中如何为组件分配整数?字段初始化报错求助
问题解答
你写的代码报错的核心原因是:字段初始化的时机太早了。
在C#里,类的字段初始化是在对象实例刚被创建、但Unity的组件生命周期函数(比如Awake、Start)执行之前完成的。这时候GetComponent<TargetComponent>()这种实例方法根本不能调用——一方面组件还没完成初始化,另一方面实例方法需要依赖已经完全构造好的对象上下文,而字段初始化阶段还不满足这个条件,所以编译器直接报错:
A field initializer cannot reference the non-static field, method, or property 'Component.GetComponent
()'
解决方法很简单,把赋值逻辑移到Unity的生命周期函数里就行,比如Awake或者Start:
public int objectIndex; // 先声明字段,不初始化 void Awake() { // Awake是Unity组件最早的可用生命周期函数,适合做依赖初始化 TargetComponent targetComp = GetComponent<TargetComponent>(); if (targetComp != null) { objectIndex = targetComp.index; } else { Debug.LogError("找不到TargetComponent组件!"); } }
或者用Start(如果不需要在Awake阶段就用到这个值):
public int objectIndex; void Start() { objectIndex = GetComponent<TargetComponent>().index; }
额外提一句:如果TargetComponent和当前脚本在同一个GameObject上,也可以直接在Inspector面板把TargetComponent拖给一个引用字段,这样更直观,还能避免GetComponent的查找开销:
public TargetComponent targetComp; // 在Inspector拖入组件 public int objectIndex; void Awake() { if (targetComp != null) { objectIndex = targetComp.index; } }
内容的提问来源于stack exchange,提问作者arynaa
相关产品推荐
相关产品推荐

