使用.contains与application.loadedlevel / loadlevel发布问题

时间:2014-11-13 03:10:23

标签: unity3d unityscript

我正在处理一个脚本,当按下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);*/  
    }
}

我不确定它为什么不起作用,这些场景具有正确的名称,并且还被添加到构建设置中。 提前致谢

2 个答案:

答案 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");

Sneaky Fix

你也可以偷偷摸摸,因为除了一个以外的所有其他情况都会带你回到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;`

解决了问题,现在一切正常