Creare Videogiochi - Game Developer

Versione completa: Salvare il gioco
Al momento stai visualizzando i contenuti in una versione ridotta. Visualizza la versione completa e formattata.
Ho cercato per mari e monti, pianure e vallate cielo e terra. E non ho trovato niente. Zero assoluto. Ma dico, non si può fare una cosa del genere. E invece sì. Ne è la dimostrazione... Ma, scusate, mi sto dilungando. Allora il problema è: Come si salva sto /censura\ di gioco? Su internet ho trovato soltanto il PlayerPrefs, ma non è quello che voglio io. Io voglio salvare i progressi del giocatore. Ma come? Qualcuno mi aiuta? Anche soltanto darmi una dritta, quello che devo cercare... GRAZIE Smile
Allora, ti posso dire per sommi capi che, per quanto gestire un salvataggio possa sembrare facile, in realtà con Unity è un grosso problema.
Innanzitutto, un salvataggio non è altro che un semplice file con dei dati convertiti in flusso di byte. Questo processo di conversione è chiamato serializzazione.
Per serializzare e deserializzare (cioè scrivere e leggere i dati scritti in byte) occorre avere programmato un serializzatore.
Unity ne ha uno incorporato e non è semplice gestirlo. Nel creare il mio gioco, io sto avendo seri problemi nel salvare perché non mi basta salvare delle semplici stringhe, o degli interi, ma devo salvare interi oggetti creati casualmente (le loro posizioni, rotazioni, ecc...).
Il serializzatore di Unity non permette di serializzare oggetti, quindi se è questo ciò che stai cercando, o aggiri la serializzazione in qualche altro modo più macchinoso, oppure ti metti sotto e inizi a programmarti un serializzatore da zero.
Purtroppo questa è una grandissima pecca di Unity, perché potendo serializzare gli oggetti di una scena, si potrebbe serializzare un oggetto, in gerarchia padre di tutti gli altri oggetti, salvando così completamente tutti i dati, senza tralasciare nulla.

Se specificassi il tipo di dati che ti serve salvare, potrei aiutarti più nello specifico. Spiegami con "progressi del giocatore" cosa intendi, perché da gioco a gioco possono esserci diversi progressi del giocatore.
(13-03-2015, 01:18 PM)Johnny 97 Ha scritto: [ -> ]Allora, ti posso dire per sommi capi che, per quanto gestire un salvataggio possa sembrare facile, in realtà con Unity è un grosso problema.
Innanzitutto, un salvataggio non è altro che un semplice file con dei dati convertiti in flusso di byte. Questo processo di conversione è chiamato serializzazione.
Per serializzare e deserializzare (cioè scrivere e leggere i dati scritti in byte) occorre avere programmato un serializzatore.
Unity ne ha uno incorporato e non è semplice gestirlo. Nel creare il mio gioco, io sto avendo seri problemi nel salvare perché non mi basta salvare delle semplici stringhe, o degli interi, ma devo salvare interi oggetti creati casualmente (le loro posizioni, rotazioni, ecc...).
Il serializzatore di Unity non permette di serializzare oggetti, quindi se è questo ciò che stai cercando, o aggiri la serializzazione in qualche altro modo più macchinoso, oppure ti metti sotto e inizi a programmarti un serializzatore da zero.
Purtroppo questa è una grandissima pecca di Unity, perché potendo serializzare gli oggetti di una scena, si potrebbe serializzare un oggetto, in gerarchia padre di tutti gli altri oggetti, salvando così completamente tutti i dati, senza tralasciare nulla.

Se specificassi il tipo di dati che ti serve salvare, potrei aiutarti più nello specifico. Spiegami con "progressi del giocatore" cosa intendi, perché da gioco a gioco possono esserci diversi progressi del giocatore.

Mi stavo domandando la stessa cosa...e la tua risposta mi incute timore Huh Se unity e i suoi programmatori hanno questa pecca con il serializzatore, figurati una semplice persona come noi, la vedo difficile programmarsi da solo una roba del genere! Comunque credo che lui intenda tipo, schiaccia start (o ciò che si vuole), scrtta salva, ci clicchi e si salvano i progressi effettuati...Quindi armi che possiedi fino a quel momento, il punto preciso in cui il giocatore è n quell'istante....Per poi fare "Carica" quando si vuole e ritorna tutto com'era....Avevo cercato anch'io qualcosa...ma ha ragione, nulla di nulla....La gente fa i giochi senza salvataggi....AHAHAHAH
Bravo Beppe, ci hai quasi azzeccato. Io vorrei salvare quante monete ha guadagnato il player, quali oggetti ha comprato allo shop e quali livelli ha completato. Per gli ultimi due penso che con il PlayerPrefs si riesca a fare, ma le monete? Aspetta aspetta aspetta, al PlayerPrefs io gli posso anche dare il valore di cento? E, anzi, domanda più importante il PlayerPrefs funziona davvero?
Esistono i playerprefs, che permettono di salvare sul registro di sistema : Stringhe (string) - Numeri interi (int) - Numeri decimali (float)
Esempio :

Codice:
//Salvare una variabile

int money = 0;

void OnCollisionecc.....() prendi le monete, money +=1;

void SaveMoney()
{
   Sintassi =  PlayerPrefs.SetInt/SetString/SetFloat("Nome variabile", valore della variabile);
   PlayerePrefs.SetInt("Money", (questa è la variabile)money);
}


// Caricare le variabili

int money = 0;

void Start()
{
    load();
}

void load()
{
   money = PlayerPrefs.GetInt("Money);
}
(14-03-2015, 01:49 AM)miticobeppe Ha scritto: [ -> ]Se unity e i suoi programmatori hanno questa pecca con il serializzatore, figurati una semplice persona come noi, la vedo difficile programmarsi da solo una roba del genere!

Beh, in realtà ti devo contraddire. Né Unity, né i suoi programmatori hanno questa "pecca".
Per spiegarti meglio la situazione: Unity si divide in Editor ed Engine. L'Editor è l'ambito in cui modifichi gli oggetti nello spazio, aggiungendo componenti, modificando valori, ecc... L'Engine è il motore vero e proprio ed è quella componente che andrà a fare girare il gioco, anche durante i test.
Ora, possiamo dire che per quanto riguarda l'Editor sia stato programmato un serializzatore a parte, o per meglio dire, nel serializzatore dell'Editor ci sono caratteristiche che sono state invece bloccate nel serializzatore dell'Engine. Questo perché in realtà è possibile serializzare i prefab, ma solo nell'ambito dell'Editor. Infatti ogni volta che trascini un oggetto dall'Inspector alle cartelle degli Assets, non stai facendo altro che serializzare l'oggetto salvandolo con il formato ".prefab" nel tuo pc. Ed in effetti si può anche serializzare un oggetto tramite script, ma sempre in Editor Mode.

Detto ciò non è impossibile scrivere un serializzatore, semplicemente non l'hanno voluto implementare nell'Engine. Io, purtroppo, non sono ancora a livelli tali da permettermi di scrivere un serializzatore, ma c'è chi l'ha fatto.
Se cercate su google "whydoidoit" potete scaricare "Unity Serializer", che altro non è che un serializzatore scritto da un programmatore da implementare nel proprio progetto.
Dando sempre il mio parere personale, preferisco ammazzarmi a trovare metodi macchinosi che possano risultare anche obsoleti, piuttosto che utilizzare script fatti da altri trovati in rete. Almeno posso dire di essere stato io a fare l'intero gioco.

Detto ciò, il metodo consigliato da Blackg96 è il metodo più consono nel tuo caso, alla fine devi salvare soltanto qualche variabile.
(14-03-2015, 03:00 PM)Blackg96 Ha scritto: [ -> ]Esistono i playerprefs, che permettono di salvare sul registro di sistema : Stringhe (string) - Numeri interi (int) - Numeri decimali (float)


(14-03-2015, 08:58 AM)Master Gabriel Ha scritto: [ -> ]Io vorrei salvare quante monete ha guadagnato il player, quali oggetti ha comprato allo shop e quali livelli ha completato. Per gli ultimi due penso che con il PlayerPrefs si riesca a fare, ma le monete?

In realtà è tutto al contrario. La cosa più facile sarà salvare le monete, dato che è una semplice variabile intera. Per salvare le altre cose, tipo quali oggetti ha comprato allo shop, ti dovrai rifare a parecchie variabili intere utilizzate come booleane.
Ad esempio:
PlayerePrefs.SetInt("Pistola", 1);
PlayerePrefs.SetInt("Fucile", 0);

Dove 1 sta per "comprato" e 0 sta per "non comprato". Ovviamente potresti utilizzare anche altri valori, tutto a tua discrezione, il mio era solo un esempio su come potresti gestire la cosa, dal momento che non ho neanche il gioco davanti.
Grazie Black!!! Big Grin Grazie Jhonny!!! Big Grin Adesso il gioco si salva! Smile Smile Smile

P.S. Chi vuole può chiudere