Unity 3D C#级别锁定和解锁

时间:2019-01-17 14:18:09

标签: c# unity3d

我用Unity和C#制作了3D游戏,但我不知道如何制作带有锁定关卡和解锁系统的关卡菜单。

https://imgur.com/a/GuXc75k

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);
    }
}

2 个答案:

答案 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