Unity地圖設計和關卡順序解鎖以及分支解鎖最好理解的實現(PlayerPrefs.GetInt與PlayerPrefs.SetInt應用及內容查詢)

Unity地圖設計和關卡解鎖最好理解的實現(PlayerPrefs.GetInt與PlayerPrefs.SetInt應用及內容查詢)

這裏說一種類似於森林冰火人的解鎖機制,也就是中心的關卡先解鎖,中間的通過了四周解鎖一個,然後一個接一個解鎖

在這裏插入圖片描述
在這裏插入圖片描述
這是屬性圖,這裏用的是UI中的Scroll View組件

1,每一個關卡的圖片由兩個圖片疊加組成,Lock是鎖的圖片,NoLock是沒有鎖的圖片,這裏邏輯很簡單,解鎖了Lock設置關閉,NoLock設置開啓,反之相反。

2,所以先要爲這裏的每一個關卡即(2,3,4,5)加一個腳本,後面我們叫做LevelSelection,腳本里面控制解鎖,以及狀態改變。

3,完成這個後,最重要的一步就是怎麼控制解鎖,我們提到的解鎖機制(解鎖機制,也就是中心的關卡先解鎖,中間的通過了四周解鎖一個,然後一個接一個解鎖)怎麼用代碼實現(代碼在GameManager(Gamemanage就是個一個場景自始至終只有一次生成的代碼,不會因爲關卡重啓而刪除)中)。

在這裏插入圖片描述
首先看LevelSelection的內容

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Levelselection : MonoBehaviour
{
    public bool isUnlocked = false;//isUnlocked(是解鎖狀態)最初置false
    public Image Lock;//綁定鎖的圖片,關卡解鎖後置false
    public Button ThisLevel;//綁定這一關的按鈕,關卡解鎖後置true
    private void Update()
    {
        UpdatelevelButton();//更新解鎖後的狀態
        Unlocklevel();
    }
    private void Start()
    {
        PlayerPrefs.SetInt("Lv0", 1);//設置lv0,要不然第一關找前一關的時候找不到
        ThisLevel = gameObject.GetComponent<Button>();
    }
    private void UpdatelevelButton()//更新解鎖後的狀態
    {
        if(isUnlocked)//解鎖後鎖的圖片關閉,按鈕設置可以按
        {
            Lock.gameObject.SetActive(false);
            ThisLevel.GetComponent<Button>().enabled = true;
        }
        else//否則鎖的圖片開啓,按鈕設置不可以按
        {
            Lock.gameObject.SetActive(true);
            ThisLevel.GetComponent<Button>().enabled = false;
        }
    }
    private void Unlocklevel()
    {
        //5,8,11,14關就是圍繞着中心的四關,第四關勝利了這四個同時解鎖
        if(int.Parse(gameObject.name)==8|| int.Parse(gameObject.name)==11|| int.Parse(gameObject.name)==14)
        {
            if (PlayerPrefs.GetInt("Lv" + 4) > 0)
            {
                isUnlocked = true;
            }
        }
        else
        {

            //gameObject.name取1,2,3之類的,previousLvIndex就是這一關的上一關
            int previousLvIndex = int.Parse(gameObject.name) - 1;
            if (PlayerPrefs.GetInt("Lv" + previousLvIndex) > 0)
            {
                isUnlocked = true;
            }
        }
    
    }
}


注意看代碼的註釋

現在就剩下最後一個內容,如何讓一關勝利後,記錄

接下來的黃體字是最重要的

PlayerPrefs.GetInt(),是拿一個名字取對應的值,自然也就有PlayerPrefs.SetInt(),如下圖,用key,value存貯一隊值,那麼我們每一關贏了,我們就存貯一個lv1,lv2,lv3之類的東西,值設置成1,那我們要看一關是不是解鎖,就只需要判斷前一關的值lv前一關是不是大於0,也就是上面的代碼PlayerPrefs.GetInt(“Lv” + previousLvIndex) > 0
在這裏插入圖片描述
再講一個重要的,拿出小本子—
那麼我們存貯的東西,在哪裏可以觀察呢,答案如下()

在Win10的左下角搜索註冊表編輯器,然後打開

在這裏插入圖片描述
在自己的Unity裏找自己的項目
在這裏插入圖片描述

那麼gameManger中的代碼呢

   //a傳關卡數字,b隨便傳,自己後面能檢測就行
    public static void LevelWin(int a, int b)
    {
        PlayerPrefs.SetInt("Lv" + a, b);
        UiManager.instance.WinOnelevel(a);
    }

在你的GameManager中加這個方法,在勝利的時候調用就行了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章