我正在处理一个脚本,当按下escape时返回到正确的场景。 在DataUpgrade,Level Select,TransferData(x)中它应该返回到StartMenu,在StartMenu它应该关闭游戏,在Level(x)中它应该返回到TransferData(x)。 以下脚本是在FunctionR的帮助下完成的。
#pragma strict
import System;
function Update () {
if (Input.GetKey ("escape"))
{
var level : String = Application.loadedLevel.ToString();
//var transferData = "TransferData";
if(level == "StartMenu"){
Application.Quit();
}
else if(level == "DataUpgrade"){
Application.LoadLevel("StartMenu");
}
else if(level == "Level Select"){
Application.LoadLevel("StartMenu");
}
else if(level.Contains("TransferData"))
Application.LoadLevel("StartMenu");
else if(level.Contains("Level"))
Application.LoadLevel (Application.loadedLevel - 1);
//trying this out but isn't working either
/*else if( transferData in level)
Application.LoadLevel("StartMenu");
else if("Level" in level)
Application.LoadLevel (Application.loadedLevel - 1);*/
}
}
我不确定它为什么不起作用,这些场景具有正确的名称,并且还被添加到构建设置中。 提前致谢
答案 0 :(得分:1)
这是您修复它的方法,并且您不需要for
循环。我使用Contains()
来做艰苦的工作。
import System;
function Update ()
{
if (Input.GetKey ("escape"))
{
var level : String = Application.loadedLevel.ToString();
if(level == "StartMenu")
Application.Quit();
else if(level == "DataUpgrade")
Application.LoadLevel("StartMenu");
else if(level == "Level Select")
Application.LoadLevel("StartMenu");
else if(level.Contains("TransferData")
Application.LoadLevel("StartMenu");
}
}
您也可以聪明并利用OR
运算符来减少相关的if
语句。
else if(level == "DataUpgrade" || level == "Level Select" || level.Contains("TransferData")
Application.LoadLevel("StartMenu");
你也可以偷偷摸摸,因为除了一个以外的所有其他情况都会带你回到StartMenu
。您可以拥有else
,以确保返回StartMenu
。
if(Application.loadedLevel == "StartMenu")
Application.Quit();
else
Application.LoadLevel("StartMenu");
答案 1 :(得分:0)
取代这一行:
var level : String = Application.loadedLevel.ToString();
与
var level = Application.loadedLevelName;`
解决了问题,现在一切正常