可能只是一些愚蠢的小錯誤,我現在太愚蠢了,看不到,但這真的讓我很困擾。我有一個我正在 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 陳述句.
uj5u.com熱心網友回復:
我確實收到了來自 Debug.Log(levelIdentifier); 的回復 (明確說明“級別”)
您確定除錯輸出中沒有空格字符(如空格或其他內容)嗎?也嘗試添加Debug.Log(levelIdentifier.Length);
。
至于if
陳述句,檢查字串是否以某個前綴開頭似乎是一種非常復雜的方法。由于Scene.name
已經string
嘗試使用stringStartsWith
(另一個可能有用的是string.Contains
):
var sceneName = SceneManager.GetActiveScene().name;
if(sceneName.StartsWith("Level"))
{
...
}
uj5u.com熱心網友回復:
在您的 levelIdentifier 中,始終會附加 2 個空字符 (\0)。所以 levelIdentifier 最后有 2 個 '\0' 字符。這就是 if 陳述句失敗的原因
char[] currentSceneChars = new char[currentScene.Length];
那是因為您使用全長輸入字串進行初始化,但未使用 char 陣列的最后 2 個插槽。所以這兩個字符保持為空
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491135.html
上一篇:如何將物體扔到玩家面對的方向?