在名为MenuScript
的脚本中,当按下开始按钮时,我有以下方法用于加载带有咔嗒声的新场景:
/// Play a sound and change the scene.
public void LoadLevel(string sceneName)
{
audioSource.Play();
StartCoroutine(LoadSceneAsync(sceneName));
}
/// Change the scene (load the level).
private IEnumerator LoadSceneAsync(string levelName)
{
yield return new WaitForSeconds(0.2f);
Application.LoadLevel(levelName);
}
/// Start the simulation once the Start Button is clicked.
public void startSimulation()
{
LoadLevel("mainScene");
}
我这样做而不只是使用Application.LoadLevel("mainScene");
当然,我保留附加了此脚本的游戏对象在Awake
中被销毁:
void Awake()
{
DontDestroyOnLoad(GameObject.Find("Menu Manager"));
}
现在......在这个已加载的新场景中,我想使用上面MenuScript
脚本中存在的相同函数来加载又一个场景。我写了以下内容:
void Start()
{
GameObject menuManager = GameObject.Find("Menu Manager");
MenuScript menuScript = menuManager.GetComponent<MenuScript>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Z))
menuScript.LoadLevel("finalScene");
}
但是,menuScript.LoadLevel
部分以红色突出显示。我究竟做错了什么?这是使用这些方法的好方法吗?有人可以帮我理解我所缺少的东西,或者是否有更好的方法可以做到这一点?谢谢
答案 0 :(得分:1)
您正尝试从另一个函数访问menuScript
变量,它是Start()
函数的局部变量。要解决此问题,请将menuScript
变量声明为类变量。这是代码示例:
private MenuScript menuScript;
void Start()
{
GameObject menuManager = GameObject.Find("Menu Manager");
menuScript = menuManager.GetComponent<MenuScript>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Z))
menuScript.LoadLevel("finalScene");
}