Unity中类成员引用脚本需绑定Inspector,方法参数无需的原因解析
Unity中两种脚本引用方式的差异解释
先看两种场景的代码:
场景1:Public字段引用
public class ExampleClass : MonoBehaviour { public ScriptExample1 scriptexample1; public void Method() { scriptexample1.score++; } }
这种情况必须在Inspector拖入脚本实例,否则会触发空引用异常,原因很直接:
scriptexample1是ExampleClass的类成员字段,默认初始值为null,没有指向任何实际的脚本实例。- Unity会将public的MonoBehaviour字段序列化到Inspector面板,目的是让你手动指定这个字段关联的场景/预制体中的
ScriptExample1实例。如果不拖入,这个字段始终是null,调用scriptexample1.score自然会触发空引用。
场景2:方法参数引用
public class ExampleClass : MonoBehaviour { public void Method(ScriptExample2 scriptexample2) { scriptexample2.score++; } }
这种情况不需要在Inspector赋值,核心原因是:
scriptexample2是方法的参数,它的值不是由ExampleClass自身初始化的,而是在调用Method方法时,由调用方传入一个已经存在的ScriptExample2实例。- 比如其他脚本会通过
exampleClassInstance.Method(已获取的ScriptExample2实例)这样的代码调用,此时参数已经是有效的实例,自然不需要在Inspector中提前赋值。
简单总结:前者是类自身持有一个引用,需要你明确告诉Unity这个引用指向哪个实例;后者是调用方法时临时传入现成的引用,类本身不需要提前持有该实例。
内容的提问来源于stack exchange,提问作者Alesf28
相关产品推荐
相关产品推荐

