我用Unity和C#制作了3D游戏,但我不知道如何制作带有锁定关卡和解锁系统的关卡菜单。
SelectLevel.cs(带有级别的菜单):
using UnityEngine;
using UnityEngine.SceneManagement;
public class SelectLevel : MonoBehaviour
{
public void selectLevel()
{
switch (this.gameObject.name) {
case "Level01" :
SceneManager.LoadScene("Level01");
break;
case "Level02" :
SceneManager.LoadScene("Level02");
break;
}
}
}
LevelComplete.cs:
using UnityEngine;
using UnityEngine.SceneManagement;
public class LevelComplete : MonoBehaviour
{
public void LoadNextLevel ()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
}
答案 0 :(得分:2)
我的建议是将可交互功能与按钮一起使用。因此,有一些经理可以跟踪关卡何时完成/解锁,并根据该设置将Button设置为可交互或不可交互。您可以使用代码here
找到类似的问题答案 1 :(得分:0)
如果您想在上一个级别完成后将下一个级别解锁,则应该对游戏中所有级别进行排列,并在完成时将每个级别标记为已完成。基于此,您可以获取数组中的下一个级别并对其进行“解锁”。
伪代码:
int[] levels = new int[15]; // 15 levels in existance
if (level1completed == true)
{
levels[0] = 1; // set the valua to 1 if it has been completed
PlayerPrefs.SetInt("level1", levels[0]); // make a file called "level1" and give it a value of levels[0]
}
现在您在哪里有加载点击级别的代码,应该使用 if语句,用于检查上一级别是否已完成
if (buttonlevel2clicked == true)
{
levels[0] = PlayerPrefs.GetInt("level1", 0); // retreive the int from the file and assign it to variable
if (levels[0] == 1) //checks if level 1 has been completed
{
level2.load(); //loads level 2
}
}
可以通过不对级别加载进行硬编码来改进此代码,但这应该使您知道该怎么做(我尚未测试)
Playerprefs >> https://docs.unity3d.com/ScriptReference/PlayerPrefs.html