• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 1 voto(i) - 5 media
  • 1
  • 2
  • 3
  • 4
  • 5
Parametri globali sugli oggetti.
#1
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 Big Grin
 
Rispondi
#2
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).
 
Rispondi
#3
si esatto, è quello che non riesco a fare
 
Rispondi
#4
Fai così:
Crea un oggetto vuoto(empty) e crea uno script con nome "Manager" e  incolla questo:
Codice:
using UnityEngine;
using System.Collections;

public class Manager : MonoBehaviour {

public bool obj1_took = false;

void Start () {
DontDestroyOnLoad (transform.gameObject);
}

void Update () {
}

}

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;
using System.Collections;

public class ObjGrab : MonoBehaviour {

void Start () {
if (GameObject.Find("Manager").GetComponent<Manager>().obj1_took == true)
{
Destroy(this.gameObject);
}
}


void Update () {

}

void OnCollisionEnter(Collision collision) {
GameObject.Find ("Manager").GetComponent<Manager> ().obj1_took = true;
Destroy (this.gameObject);
}

}

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 Smile
 
Rispondi
#5
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?
 
Rispondi
#6
Per questo hanno inventato gli array.
 
Rispondi
#7
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;
using System.Collections;

public class Manager : MonoBehaviour {
    
    public bool[] obj_took;
    void Start () {
        obj_took = new bool[10];
        obj_took [1] = true;
        DontDestroyOnLoad (transform.gameObject);
    }
    
    void Update () {
        
    }
}
La riga "public bool[] obj_took;" definisce obj_took come array booleano.
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;
using System.Collections;

public class ObjGrab : MonoBehaviour {

    void Start () {
        if (GameObject.Find("Manager").GetComponent<Manager>().obj_took[1] == true)
        {
            Destroy(this.gameObject);
        }
    }
    
    void Update () {
    
    }

    void OnCollisionEnter(Collision collision) {
        GameObject.Find ("Manager").GetComponent<Manager> ().obj_took[1] = true;
        Destroy (this.gameObject);
    }
}
La riga "if (GameObject.Find("Manager").GetComponent<Manager>().obj_took[1] == true)" controlla lo stato della seconda variabile.
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.
 
Rispondi
#8
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
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Effetto perimetro selezione oggetti Almiotti79 11 713 22-10-2016, 12:01 AM
Ultimo messaggio: Almiotti79
  Scomparsa oggetti Unity alexssio 4 642 22-01-2016, 01:06 AM
Ultimo messaggio: alexssio
  Rottura vetro o altri oggetti all'arrivo del proiettile nostopsocial 9 1,049 16-05-2015, 07:16 AM
Ultimo messaggio: Master Gabriel
  Condividere variabili fra oggetti. Skikky 2 867 01-08-2012, 10:54 PM
Ultimo messaggio: Skikky

Vai al forum:


Browsing: 1 Ospite(i)