Запазване/зареждане в unity3d

Сега осъзнавам, че този въпрос се задава много и ви уверявам, че съм търсил много по темата, опитах някои скриптове и опитах сериализатора от магазина за активи на unity. но просто не мога да намеря това, което ми трябва.

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

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

РЕДАКТИРАНЕ: това е скриптът, при който бих добавил 1 към levelIndex, след като играчът преодолее нивото и целта ми е след като играчът натисне load в стартовото меню, да се появи ново меню и играчът ще може да избира от всички отключени нива и след като изберете, нивото ще се зареди.

(това, което в момента имам по отношение на този проблем, е на // редовете)

#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, защото го намирам за по-лесен от c# и почти всичко, което можах да намеря за json примери, беше в c#, ​​тъй като няма да имам достатъчно знаци в този коментар, ще редактирам въпроса си с повече подробности, ако можете дайте ми примери, мисля, че ще мога да го разбера много по-лесно :) благодаря предварително - person Dane Gillis; 01.09.2014