Сохранение/загрузка в unity3d

Теперь я понимаю, что этот вопрос часто задают, и уверяю вас, что я провел много поисков по этому вопросу, попробовал несколько сценариев и попробовал сериализатор из хранилища активов Unity. но я просто не могу найти то, что мне нужно.

следующий уровень открывается только после прохождения предыдущего, поэтому он должен помнить, какие уровни были пройдены/разблокированы, и при загрузке вы можете выбрать любой из разблокированных уровней, также необходимо запомнить наивысший балл на каждом уровне и заменить его только в том случае, если новая оценка выше, более низкие оценки не нужно сохранять.

то, что я постоянно находил в гугле, это то, как сохранить все объекты и вещи, которые произошли на уровне, но мне не нужно сохранение на уровне, мои уровни очень короткие, и их нужно пройти за один раз.

РЕДАКТИРОВАТЬ: это скрипт, в котором я бы добавил 1 к levelIndex после того, как игрок пройдет уровень, и моя цель - после того, как игрок нажмет кнопку загрузки в меню запуска, появится новое меню, и игрок сможет выбирать из всех разблокированных уровни и после выбора уровень загрузится.

(то, что у меня сейчас есть по этому вопросу, находится в // строках)

#pragma strict
var normalParticle : ParticleSystem;
var teleportParticle : ParticleSystem;
var teleportSound : AudioClip;
var ignoreListenerPause: boolean;
// var levelIndex : int;
function Start() {
    teleportParticle.Stop();
}

function OnTriggerEnter(other : Collider)
{
    if(other.tag == "Player"){
        teleportParticle.Play();
        normalParticle.Stop();
        for (var o : GameObject in GameObject.FindGameObjectsWithTag("Virus"))
        {
            var comp : Component = o.GetComponent(ChaseScript);
            if (comp != null)
            {
                comp.active = false;
            }
        }
        yield WaitForSeconds (0.5);
        audio.ignoreListenerPause = true;
        audio.PlayOneShot(teleportSound);
        yield WaitForSeconds (3.9);
        //levelIndex++;
        //PlayerPrefs.SetInt("Last_Level", levelIndex);
        Application.LoadLevel(Application.loadedLevel+1);
    }
}

function OnTriggerExit(other : Collider)
{

    teleportParticle.Stop();
    normalParticle.Play();

}

Ранее я нашел учебник, объясняющий, как добиться того, чего я хотел, но это неэффективно для игры с большим количеством уровней, он использует сценарий для каждого пройденного уровня и использует if для каждого отдельного уровня, и в моей игре было бы около 50, так что я бы предпочел лучше/чище вот видео: http://forum.unity3d.com/threads/unity-level-unlocking-system-using-playerprefs.146955/. вы можете увидеть его сценарии в 10:10 и 14:14.

заранее спасибо :)


person Dane Gillis    schedule 01.09.2014    source источник
comment
Кажется, json может быть излишним для вашей проблемы, я обновил свой ответ.   -  person Imapler    schedule 02.09.2014


Ответы (1)


Если данные достаточно простые, например, одна или две переменные, перейдите к шагу 3.

  1. Создайте класс для хранения ваших данных о прогрессе
  2. Сериализуйте класс с помощью json, чтобы получить строку
  3. Сохраните данные в PlayerPrefs

Сохранять

PlayerPrefs.SetInt("Last_Level", levelIndex);
PlayerPrefs.Save();

Нагрузка

int levelIndex = PlayerPrefs.GetInt("Last_Level", 0);
person Imapler    schedule 01.09.2014
comment
спасибо за ваш ответ, я пытался это сделать в течение последнего часа, чтобы заставить это работать, но я думаю, что json слишком сложен для меня прямо сейчас, у меня уже есть проблемы с использованием PlayerPrefs, который должен быть намного проще, чем json из чего я читал онлайн. Кроме того, в настоящее время я работаю в unityscript, потому что я нахожу его проще, чем С#, и почти все, что я мог найти о примерах json, было на С#, так как в этом комментарии не будет достаточно символов, я отредактирую свой вопрос с более подробной информацией, если вы могли бы предоставьте мне примеры, я думаю, я смогу понять это намного проще :) заранее спасибо - person Dane Gillis; 01.09.2014