Сохраните счет после уровня, а затем используйте его, чтобы разблокировать предметы в меню. Единство 2D - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время я работаю над небольшой мобильной игрой, в которой вы бросаете копья в цели, и в зависимости от того, сколько копий у вас осталось в конце уровня, вы получаете от одной до трех рун (аналогично системе начисления звезд в Angry Птицы). План состоит в том, чтобы сохранить руны и использовать их, чтобы разблокировать различные варианты копий в главном меню. На данный момент вы можете увидеть, сколько рун вы получили после прохождения уровня, но значения еще не сохраняются. Мой вопрос: как мне go сохранять руны после каждого уровня? Любые идеи? Вы можете увидеть часть скрипта, которую я использую для этого ниже. Заранее спасибо.

public int totalRunes = 0;

public GameObject rune1;
public GameObject rune2;
public GameObject rune3;
public void RuneCollection()
{
    if (currentSpears >= 2)
    {
        Debug.Log("3 runes collected!");
        rune3.SetActive(true);
        totalRunes = 3;
    }
    else if (currentSpears >= 1)
    {
        Debug.Log("2 runes collected!");
        rune2.SetActive(true);
        totalRunes = 2;
    }
    else
    {
        Debug.Log("1 rune collected!");
        rune1.SetActive(true);
        totalRunes = 1;
    }
}

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вы можете сохранить свои данные с помощью PlayerPrefs для некоторых отдельных значений или PersistentDataPath для нескольких значений, таких как класс. Узнайте больше с по этой ссылке , и вы можете использовать их, как показано ниже.

PlayerPrefs:

private int score = 0;

//set value
PlayerPrefs.SetInt("Score", score);

//get value
private int savedScore = PlayerPrefs.GetInt("Score");

PersistentDataPath:

private string savedName;
private int savedHealth;
private string loadedName;
private int loadedHealth;

public void Save(){
    BinaryFormatter bf = new BinaryFormatter();
    FileStream file = File.Open(Application.persistentDataPath + "/FileName.dat", 
         FileMode.Create);
    PlayerClass newData = new PlayerClass();
    newData.health = savedHealth;
    newData.name = savedName;
    bf.Serialize(file, newData);
    file.Close();
}

public void Load(){

    if (File.Exists(Application.persistentDataPath + "/FileName.dat")){
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Open(Application.persistentDataPath + "/FileName.dat", FileMode.Open);
        ObjData newData = (ObjData)bf.Deserialize(file);
        file.Close();
        loadedHealth = newData.health;
        loadedName = newData.name;
    }
}

[Serializable]
class PlayerClass{
    public string name;
    public int health;

}
0 голосов
/ 13 июля 2020

Я бы использовал систему Unitys PlayerPrefs.

Пример:

Оценка настроек:

public Text score;
int currentscore = 0;

Повышение оценки:

currentscore += 1;
score.text = currentscore.ToString();

Настройка HighScore и Меню загрузки:

GameManager.SetHighScore(currentscore);
SceneManager.LoadScene("Menu");

Функции для загрузки / изменения PlayerPrefs:

void Start()
{
    highscore.text = PlayerPrefs.GetInt("HighScore", 0).ToString();
}

public static void SetHighScore(int score)
{
   if (score > PlayerPrefs.GetInt("HighScore", 0))
   {
       PlayerPrefs.SetInt("HighScore", score);
   }
}

Ваш код адаптирован для PlayerPrefs:

public int currentSpears = 0;

public GameObject rune1;
public GameObject rune2;
public GameObject rune3;

void Start()
{
    currentSpears = PlayerPrefs.GetInt("CurrentSpears", 0).ToString();
}

public static void IncreaseSpears()
{
    int spears = PlayerPrefs.GetInt("CurrentSpears", 0);
    PlayerPrefs.SetInt("CurrentSpears", spears++);
}

public void RuneCollection()
{
    if (currentSpears >= 2)
    {
        Debug.Log("3 runes collected!");
        rune3.SetActive(true);
        totalRunes = 3;
    }
    else if (currentSpears >= 1)
    {
        Debug.Log("2 runes collected!");
        rune2.SetActive(true);
        totalRunes = 2;
    }
    else
    {
        Debug.Log("1 rune collected!");
        rune1.SetActive(true);
        totalRunes = 1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...