unity如何解锁关卡

您所在的位置:网站首页 森林冰火人关卡解锁条件 unity如何解锁关卡

unity如何解锁关卡

2024-07-10 18:38| 来源: 网络整理| 查看: 265

下图是一个游戏的关卡界面,在设计关卡时,当前面一关通关后使后一关的关卡解锁该如何设计呢,本章内容将一解锁六个关卡为例

一、理论知识

1、在unity中,如何实现某些按钮可以互动,而其他按钮无法互动呢,这个关键在于button组件上面有一个叫Interactable的布尔值,只要我们把它取消勾选,那么这些按钮就无法互动了,所以在解锁按钮了之后,我们要把这些按钮上的Interactable设成true,没有解锁的关卡设置为false,那么这些按钮就不能产生互动了。

 一般来说,我们使用for循环,先把所有的按钮都设置成不可互动的按钮,代码如下

for(int i=0;ibuild,把需要的场景拖进去,并记住后面的序号,场景跳转的时候需要用到,我这里有一些场景是不需要的,大家按照自己的场景适当变通就好,我这里的总关卡场景是quick,对应序号3,下面的1-6是六个关卡场景,对应序号4-9

3、创建六个脚本用来实现六个场景的跳转,新建六个C#脚本,分别命名为Select1-Select6

六个脚本的代码如下:(这里的4是我的第一关的场景序号,下面几关的一次往后就好)

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Select1 : MonoBehaviour { public void OnLoginButtonClick() { SceneManager.LoadScene(4); } }

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Select2 : MonoBehaviour { public void OnLoginButtonClick() { SceneManager.LoadScene(5); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Select3 : MonoBehaviour { public void OnLoginButtonClick() { SceneManager.LoadScene(6); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Select4 : MonoBehaviour { public void OnLoginButtonClick() { SceneManager.LoadScene(7); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Select5 : MonoBehaviour { public void OnLoginButtonClick() { SceneManager.LoadScene(8); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Select6 : MonoBehaviour { public void OnLoginButtonClick() { SceneManager.LoadScene(9); } }

4、把六个代码赋给buttonscript

 

5、场景跳转,这里以第一关跳转为例,其余几关的方法相同,选中第一个button,即命名为1的按钮,在右侧Inspector界面中往下滑,看到一个 on click的地方,选择+号,把buttonscript拖到右侧,在左边选择Select1,如下图,其余几个按钮跳转关卡也相同

6、关卡解锁代码,新建C# 命名为LevelSelectManager,相关代码注释如下,把这个代码赋给buttonpanel,然后把buttonpanel赋给levelSelectPanel,这里要注意的是,由于解锁的关卡数使用的是客户端数据存储,所以当运行程序后,即使关闭程序,或者关闭unity,数据都已经发生了改变(如果所有关卡都已经通关,重新运行游戏时关卡仍然是通关状态,要想回到初始状态,则要使用PlayerPrefs.SetInt("unlockedLevelIndex", 0);把数据归零,运行程序后关闭,然后把这行代码注释掉,重新运行程序即可)

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class LevelSelectManager : MonoBehaviour { public GameObject levelSelectPanel; Button[] levelSelectButtons; int unlockedLevelIndex ; // Start is called before the first frame update void Start() { // PlayerPrefs.SetInt("unlockedLevelIndex", 0); unlockedLevelIndex = PlayerPrefs.GetInt("unlockedLevelIndex"); //获取解锁过得关卡 levelSelectButtons = new Button[levelSelectPanel.transform.childCount];//关卡数组初始化 for(int i = 0; i < levelSelectPanel.transform.childCount; i++)//获取所有的button组件 { //给每个关卡贴上关卡数 levelSelectPanel.transform.GetChild(i).GetChild(0).GetComponent().text = (i + 1).ToString(); levelSelectButtons[i]= levelSelectPanel.transform.GetChild(i).GetComponent(); } //将所有button组件的iteractable值设置成false foreach(var levelSelectButton in levelSelectButtons) { levelSelectButton.interactable = false; //添加事件 levelSelectButton.onClick.AddListener(delegate () { //获取点击按钮上的数字,这个数字就是第几关 Text text = levelSelectButton.gameObject.GetComponentInChildren(); //保存第几关 PlayerPrefs.SetInt("levelNum", int.Parse(text.text)); }); } //解锁后关卡的interactable设置成true for(int i = 0; i < unlockedLevelIndex +1; i++) { levelSelectButtons[i].interactable = true; } CheckLevelNum(); } // Update is called once per frame void CheckLevelNum() { int unlock = PlayerPrefs.GetInt("unlockedLevelIndex"); int levelNum = PlayerPrefs.GetInt("levelNum"); //通关条件 if (levelNum > unlock && levelNum


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3