我的if语句不起作用.我做错了什么?



可能只是一些愚蠢的小错误,我现在太笨了,看不出来,但它真的让我很困扰。我在Unity中开发了一款小游戏我编写了一个方法用于启动下一个关卡:

public void ButtonNextLevel()
{
string currentScene = Convert.ToString(SceneManager.GetActiveScene().name);
char[] currentSceneChars = new char[currentScene.Length];
int stringLength = currentScene.Length;
int levelIndex;
using (StringReader sr = new StringReader(currentScene))
{
sr.Read(currentSceneChars, 0, currentScene.Length - 2);
}
string levelIdentifier = new string(currentSceneChars);
Debug.Log(levelIdentifier);
if(levelIdentifier == "Level")
{
levelIndex = currentScene[stringLength - 1];
Debug.Log(levelIndex);
string nextSceneName = "Level " + (levelIndex + 1).ToString();
if(SceneManager.GetSceneByName(nextSceneName).IsValid())
{
SceneManager.LoadScene(nextSceneName);
}
else {GameWon();}
}
}
public void GameWon()
{
SceneManager.LoadScene("GameWon");
}

主要问题似乎是if(levelIdentifier == "Level")语句。如果我到达这个脚本执行的地方,我确实得到了Debug.Log(levelIdentifier);的响应(它清楚地说明了"Level"),但不是来自Debug.Log(levelIndex);:调试日志我不明白为什么即使满足要求也不执行if语句。

我从Debug.Log(levelIdentifier)得到响应;(其中明确写明"等级")

您确定调试输出中没有空白字符(如空格或其他东西)吗?试着添加Debug.Log(levelIdentifier.Length);

对于if语句,它似乎是一种非常复杂的方式来检查字符串是否以某个前缀开始。由于Scene.name已经是string,请尝试使用stringStartsWith(另一个可能有用的是string.Contains):

var sceneName = SceneManager.GetActiveScene().name;
if(sceneName.StartsWith("Level"))
{
...
}

在你的levelIdentifier有2个空字符()总是会追加。所以levelIdentifier在最后有2个''字符。这就是if语句失败的原因

这是因为您初始化char[] currentSceneChars = new char[currentScene.Length];与输入字符串的完整长度,但没有使用字符数组的最后2个槽。这两个字符保持为null

相关内容

  • 没有找到相关文章

最新更新