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




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Attivare Script
#2
E' un consiglio che do a tutti lo ripeto anche a te, seguite i tutorial ufficiali di Unity. Almeno il Roll a Ball e lo Space Shooter; se poi avete problemi a capirli chiedete pure che siamo disponibili ad aiutarvi.

Dalla descrizione che fai sembra più che altro un errore di architettura, di come l'hai pensata. Il punteggio è una cosa a se state e merita la dignità di un oggetto tutto per se che lo gestisca. Nel caso dello Space Shooter viene usato un oggetto (e quindi il suo script) che si chiama GameController (o GC in breve), in particolare questo oggetto per la sua natura deve essere UNICO in tutta la vita della partita, perché UNICO è il punteggio (gli asteroidi e gli spari non lo sono invece).

Osserva gli script https://unity3d.com/learn/tutorials/proj...list=17147 (magari riparti da tutto il tutorial).

Il GC possiede un punteggio (score) che rappresenta un attributo di questo oggetto (un suo dato) e una serie di metodi (le azioni che può fare), uno di questi metodi è AddScore (int newScoreValue), questo quando viene invocato da fuori va ad incrementare il punteggio di quel tot che gli viene passato ed è aggiornato a video con la GUI.

Nel primo script DestroyByContact che gestisce le collisioni tra gli spari e gli asteroidi viene dichiarato un oggetto GC con l'accorgimento di riconoscere che è il primo ed unico GC del gioco tramite il riconoscimento dei Tag (il GC quando è stato creato in Unity gli è stato dato un Tag apposta, un nome proprio diciamo).
Codice:
   public int scoreValue;
   private GameController gameController;

   void Start ()
   {
       GameObject gameControllerObject = GameObject.FindWithTag ("GameController");
       if (gameControllerObject != null)
       {
           gameController = gameControllerObject.GetComponent <GameController>();
       }
       if (gameController == null)
       {
           Debug.Log ("Cannot find 'GameController' script");
       }
   }


Poi se c'è collisione ecc.. si chiede a quel GC (il SOLO!) di incrementare il punteggio (AddScore) di un certo valore, per poi proseguire distruggendo sparo e asteroide :
Codice:
       gameController.AddScore (scoreValue);
       Destroy(other.gameObject);
       Destroy(gameObject);

Il GC (che ricordo è UNICO) dentro il suo codice fa quello che abbiamo detto:
Codice:
   public void AddScore (int newScoreValue)
   {
       score += newScoreValue;
       UpdateScore ();
   }

Quindi per riassumere, il punteggio deve appartenere allo script2 che deve essere un oggetto UNICO, che si deve occupare di incrementarlo quando lo script1 (o tutti gli altri) lo richiede e deve anche mostrarlo (e questo già lo fa se ho capito bene).

Più semplice è la soluzione di Roll a Ball https://unity3d.com/learn/tutorials/proj...list=17141 qui usa sempre un oggetto unico il PlayerController (che gestisce il movimento e le collisioni della pallina, anche lui per sua natura UNICO). Questo oggetto ha la variabile punteggio ed è lui stesso ad incrementarla con le collisioni e ad aggiornare a video il testo.

Mi auguro di non averti fatto più confusione, ci sono molti modi per gestire la faccenda dei punti e questo è uno di quelli.
 
Rispondi
  


Messaggi in questa discussione
Attivare Script - da Charlie01 - 19-10-2016, 05:47 PM
RE: Attivare Script - da Chip - 19-10-2016, 09:09 PM
RE: Attivare Script - da Charlie01 - 19-10-2016, 10:37 PM
RE: Attivare Script - da carloss - 20-10-2016, 11:31 AM
RE: Attivare Script - da Charlie01 - 20-10-2016, 03:51 PM
RE: Attivare Script - da carloss - 20-10-2016, 08:50 PM

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  attivare eventi con i collider NatakuZ 5 770 13-02-2013, 11:52 AM
Ultimo messaggio: NatakuZ

Vai al forum:


Browsing: 1 Ospite(i)