Unity点击按钮隐藏带标签GameObject时变量作用域报错如何解决?
报错原因
你遇到的报错是C#的变量作用域规则导致的:
- 在
Start()方法内部声明的buttons_in_create_menu属于方法局部变量,仅在Start方法的代码块范围内可访问,其他方法(比如你写的ChangeMenu)无法读取这个变量的内容,所以编译器会提示变量不存在于当前上下文。 - 该问题和Unity的生命周期执行顺序没有关系,哪怕
Start确实会先执行,变量出了对应的作用域范围就已经无法被外部访问。
解决方法
把buttons_in_create_menu提升为类的成员变量,声明在所有方法的外部,这样整个类内部的所有方法都可以访问这个变量。修正后的代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Modify_Menu_Button_Handler : MonoBehaviour { // 声明为类私有成员变量,整个类内可访问 private GameObject[] buttons_in_create_menu; void Start() { buttons_in_create_menu = GameObject.FindGameObjectsWithTag("CreateMenu"); } public void ChangeMenu() { // 增加非空判断,避免标签不存在时触发空引用报错 if (buttons_in_create_menu != null && buttons_in_create_menu.Length > 0) { foreach (GameObject button in buttons_in_create_menu) { button.SetActive(false); } } } }
内容的提问来源于stack exchange,提问作者DJG
相关产品推荐
相关产品推荐

