Unity中CS0103错误:_blockedMatter不存在于当前上下文问题排查
问题分析:变量作用域引发的CS0103错误
问题描述
报错信息:Error CS0103: The name '_blockedMatter' does not exist in the current context
场景:在Unity的Start()方法中实例化GameObject并赋值给_blockedMatter,但调用unlock()方法销毁该对象时触发上述错误。相关代码如下:
void Start() { ... GameObject _blockedMatter = (GameObject)Instantiate(buildmanager.blockedMatter, GetBuildPosition(), Quaternion.identity); ... } ... public void unlock() { ... Destroy(_blockedMatter); ... }
同时存在疑问:为何以下代码能正常运行?
... GameObject _cleaningEffect = (GameObject)Instantiate(buildmanager.cleaningEffect, GetBuildPosition(), Quaternion.identity); Destroy(_cleaningEffect, 5f); ...
错误原因
- 变量作用域限制:你在
Start()方法内部声明了_blockedMatter,这个变量的作用域仅局限于Start()方法内部。当Start()执行完成后,该变量会被销毁,unlock()方法无法访问到它,因此触发“当前上下文中不存在该名称”的错误。 - 正常运行代码的逻辑:那段代码里的
_cleaningEffect声明和Destroy()调用处于同一个方法内部,变量的作用域覆盖了Destroy()的调用位置,所以可以正常访问并执行销毁操作。
解决方案
将_blockedMatter声明为类的成员变量(在所有方法外部定义),这样类中的所有方法都能访问到该变量:
// 在类内部、所有方法之外声明成员变量 GameObject _blockedMatter; void Start() { ... // 直接赋值,不再重新声明变量 _blockedMatter = (GameObject)Instantiate(buildmanager.blockedMatter, GetBuildPosition(), Quaternion.identity); ... } public void unlock() { ... Destroy(_blockedMatter); ... }
内容的提问来源于stack exchange,提问作者Lexus
相关产品推荐
相关产品推荐

