跟siki学院教程学习愤怒的小鸟案例存储星星解决记录<二>
使用PlayerPrefs存儲并顯示星星數據無效bug
保存不了星星數據。。。
找了一天,完全跟siki學院的代碼一模一樣,但就是運行不起來,后來我(在一個撤退鍵上的腳本)設置所有相關的存儲的變量都賦初值0,就好了,灰常玄學,不過這個歸零鍵倒是對之后敲代碼調試蠻有幫助。
判斷下一關卡是否開啟使用的int.Parse造成字符串格式錯誤bug
我抄代碼判斷小關卡該不該可選時,用的int.Parse總是報錯FormatException異常,(字符串內容不是數字)還有很多高級語句用法出錯
于是只能重新寫儲存數據的大部分,寫的非常的繞圈繞圈繞圈
小關卡選擇的部分代碼levelSelect:
private void Start(){if (PlayerPrefs.GetInt("Star") /2>= int.Parse(gameObject.name)) //如果夠該關卡的星星數量,則使該關卡可點擊{isSelect = true;}} public void Selected(){if (isSelect == true){SceneManager.LoadScene(2);//進入游戲PlayerPrefs.SetString("nowLevel", "level" + gameObject.name);//gameObject.name 是掛載當前腳本的物體, 不是某關卡}}大關卡選擇的部分代碼mapSelect:
void Start(){if (StarNum == 0)//通過標識符判斷是哪一大系列關卡,同時也是開啟該關卡需要的星星數{if (PlayerPrefs.GetInt("Star") >= StarNum)//如果夠該關卡的星星數量,則使該關卡可點擊,star為星星總數{isSelect = true;PlayerPrefs.SetInt("Map", 1);//為第一個map大關卡LevelStarsText.text = PlayerPrefs.GetInt("Map1") + "/27";//輸出該關卡的星星總數在游戲界面上(Map)/27}}if (isSelect){locks.SetActive(false);//點擊后的使鎖消失,顯示出星星數量stars.SetActive(true);}gameManager
public void SaveStar(){if (starsNum1 > PlayerPrefs.GetInt(PlayerPrefs.GetString("nowLevel"))){PlayerPrefs.SetInt(PlayerPrefs.GetString("nowLevel"), starsNum1);int sum = 0;if (PlayerPrefs.GetInt("Map") == 1){sum = PlayerPrefs.GetInt("level1") + PlayerPrefs.GetInt("level2") + PlayerPrefs.GetInt("level3") +PlayerPrefs.GetInt("level4") + PlayerPrefs.GetInt("level5") + PlayerPrefs.GetInt("level6") +PlayerPrefs.GetInt("level7") + PlayerPrefs.GetInt("level8") + PlayerPrefs.GetInt("level9");//累加,見笑了,抄了好多高級代碼都運行不了,只能寫底端邏輯PlayerPrefs.SetInt("Map1", sum);}}}儲存數據思路詳解
代碼如上圖123,重點將每一關卡從1開始取數字名字
首先在levelSelect里的點擊跳轉的函數上把該小關卡的名字"level" + gameObject.name以字符串的形式傳給nowLevel
(gameObject:在每個小關卡都掛上levelSelect腳本)
再去gameManager里的儲存函數把當前這個關卡的星星數量starsNum1存到nowLevel里的字符串level+n
而nowLevel里的字符串會隨著小關卡的點擊一直刷新,變成點擊的某關卡的名字
最后去mapSelect存儲大關卡的總星星數,就用最簡單的map1=level1+…leveln,存每個大關卡的數據,代碼如上圖2
小鳥飛行中點擊暫停會釋放技能
記個筆記之后注意
小鳥飛行中點擊暫停會釋放技能的問題:可以通過設置UI界面的【raycast target】屬性,不勾選可以不做交互,讓鼠標點擊穿過這層UI。
去往下一關的設置
public void playNext(){Time.timeScale = 1;SaveStar();//存儲數據string levelNum = PlayerPrefs.GetString("nowLevel");//去掉字符串里帶level的字符,即得到當前是第幾關levelNum = levelNum.Replace("level", "");//關卡數加一 這里還要判斷一下當前i是否大于當前地圖里邊最大的關卡數54int i = int.Parse(levelNum) + 1;levelNum = "level" + i.ToString();//(level“第幾關卡”)if ((PlayerPrefs.GetInt("Star") / 2 >= i)&&i<55)//如果星星總數÷2大于下一關卡的名字(每一關從1的順序取名)//如果星星數量夠去往下一關,則跳轉{PlayerPrefs.SetString("nowLevel", levelNum);SceneManager.LoadScene(2);}}這個腳本掛在游戲game.unity里的主攝像機上,攝像機下清空,游戲打包到文件夾里,當跳轉到SceneManager.LoadScene(2) 時去往nowLevel此時代表隊字符串level+n,第n個關卡里。
總結
以上是生活随笔為你收集整理的跟siki学院教程学习愤怒的小鸟案例存储星星解决记录<二>的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BOOTSTRAP4的栅格系统详解
- 下一篇: GeoJSON简述