Parametri globali sugli oggetti. - Versione stampabile +- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi) +-- Forum: Unity3D Italia (https://www.making-videogames.net/giochi/Forum-Unity3D-Italia) +--- Forum: Richieste di Aiuto per Unity 3D (https://www.making-videogames.net/giochi/Forum-Richieste-di-Aiuto-per-Unity-3D) +--- Discussione: Parametri globali sugli oggetti. (/thread-Parametri-globali-sugli-oggetti) |
Parametri globali sugli oggetti. - 93sunderland - 24-05-2016 Raga, vi chiedo urgentemente aiuto perchè è una mattinata che ci sto ragionando ma non riesco a trovare una soluzione... Vorrei creare uno script che "colleziona" tutti i dati sugli oggetti da poter raccogliere e mettere nell'inventario. Sto iniziando con la cosa più semplice, ovvero far in modo che quando un oggetto venga raccolto ci sia un parametro globale che stabilisce lo stato dell'oggetto, ovvero che è stato raccolto. Quindi questo parametro globale fa in modo che cambiando scena, l'oggetto in questione venga segnalato come raccolto e quindi non si trova più nella posizione di partenza (è stato distrutto). I PlayerPrefs so come si utilizzano, ma il mio problema non è su questo, bensì su come posso creare uno script dove posso raccogliere tutte le informazioni degli oggetti raccolti in quella scena, e quindi solo successivamente poterli salvare con il PlayerPrefs. Attento risposte RE: Parametri globali sugli oggetti. - Zettamax - 25-05-2016 Ciao, scusa ma non mi è chiaro qual'è il problema. Questo qui sotto è il risultato che vuoi ottenere ? Citazione:far in modo che quando un oggetto venga raccolto ci sia un parametro globale che stabilisce lo stato dell'oggetto, ovvero che è stato raccolto. Quindi questo parametro globale fa in modo che cambiando scena, l'oggetto in questione venga segnalato come raccolto e quindi non si trova più nella posizione di partenza (è stato distrutto). RE: Parametri globali sugli oggetti. - 93sunderland - 26-05-2016 si esatto, è quello che non riesco a fare RE: Parametri globali sugli oggetti. - Zettamax - 26-05-2016 Fai così: Crea un oggetto vuoto(empty) e crea uno script con nome "Manager" e incolla questo: Codice: using UnityEngine; la variabile "public bool obj1_took = false;" in questo caso consentirà di controllare se l'oggetto è stato preso o meno, ovviamente puoi usare questo sistema ma utilizzando variabili di tipo int o float per controllare eventuali altri stati dell'oggetto/degli oggetti. La funzione "DontDestroyOnLoad (transform.gameObject);" fa sì che l'oggetto che contiene lo script non venga distrutto al cambio della scena. Ora nell'oggetto da raccogliere crea uno script con nome "ObjGrab" e incolla questo: Codice: using UnityEngine; La parte contenuta nella funzione "void Start()" non fa altro che controllare la variabile del manager di prima, e nel caso in cui la variabile segni l'oggetto come già preso lo distrugge. La parte della funzione "void OnCollisionEnter(Collision collision)" si attiva quando l'oggetto entra in collisione, provocando il cambiando lo stato della variabile "obj1_took" e la distruzione di se stesso. Come puoi notare in questi script non ho creato una parte dove lo stato della variabile "obj1_took" viene salvato, infatti se riavvii la simulazione del gioco la variabile tornerà al suo stato originario, ma non credo che tu abbia difficoltà ad implementarla. Spero di esserti stato d'aiuto, in caso di difficoltà non esitare a chiedere RE: Parametri globali sugli oggetti. - 93sunderland - 27-05-2016 fino a qui ci sono, però mi sorge un dubbio: quindi all'interno del gameObject "Manager" dovrei inserire tante variabili booleane quanti sono gli oggetti presenti nel gioco? RE: Parametri globali sugli oggetti. - itreturns - 27-05-2016 Per questo hanno inventato gli array. RE: Parametri globali sugli oggetti. - Zettamax - 27-05-2016 Si, per come sono impostati gli script ora dovresti creare manualmente ogni singola variabile. Come ha detto giustamente itreturns, il problema è facilmente risolvibile utilizzando gli array. Per implementare gli array negli script di prima basta fare qualche semplice modifica, infatti lo script Manager diventa: Codice: using UnityEngine; La riga "obj_took = new bool[10];" definisce la lunghezza dell'array (ovvero quante variabili). La riga "obj_took [1] = true;" definisce lo stato della seconda variabile (l'array parte da 0). Mentre lo script objGrab diventa: Codice: using UnityEngine; La riga "GameObject.Find ("Manager").GetComponent<Manager> ().obj_took[1] = true;" imposta il valore della seconda variabile. Questo è tutto, se provi ad avviare la simulazione del gioco l'oggetto con lo script ObjGrab non comparirà perchè la variabile è impostata su "true" nello script Manager. RE: Parametri globali sugli oggetti. - 93sunderland - 27-05-2016 ok grazie mille, siete stati davvero utili ovviamente ho costruito lo script in modo un po' diverso ma grazie a voi adesso so cosa e come fare |