Unity 3D Unity 2D sistema per cambio arma

Stato
Discussione chiusa ad ulteriori risposte.

LordWalrus

Utente Bronze
25 Dicembre 2012
8
4
1
45
Ciao, stavo provando a sviluppare un nuovo gioco su unity in 2D e sono arrivato a sviluppare il sistema per cambiare arma. Prima di tutto, il mio personaggio è diviso in 3 parti differenti:
• Testa
• Corpo collegato alle gambe
• Braccia con l'arma equipaggiata
Tutte e 3 le parti del mio personaggio eccetto la terza (quindi Braccia con arma equipaggiata) possiedono una animazione. Ho deciso di non introdurre anche lì una animazione per facilitarmi il sistema di cambio arma.
Fino a questo punto sono riuscito a sviluppare senza problemi il mio codice, tutta via, poiché è un gioco con meccaniche simili a quelle di Metal Slug, è necessario che premendo il tasto per sparare e il tasto per guardare verso l'alto, il mio personaggio sostituisca la Sprite della arma equipaggiata con una che abbia le braccia stese verso l'alto, dato che tenere la stessa Sprite e farla roteare a livello estetico non mi piaceva.
Il problema è che nel momento in cui vado a inserire la combinazioni dei tasti, il mio codice non riesce a riconoscere quale arma avevo equipaggiato precedentemente (probabilmente perché ho utilizzato il metodo update). Quindi la Sprite viene cambiata, però non con quella corretta. Allego un'immagine con il codice del cambio arma, grazie mille!
 

Allegati

  • unity.png
    unity.png
    152.6 KB · Visualizzazioni: 59
Non e' che hai sbagliato l'ordine delle sprite nelle variabili inserite da inspector?
Prova a controllare perche' a me e' capitato in altre occasioni di fare errori simili.
 
Grazie mille per la risposta.
Dunque, ho controllato più volte l'ordine delle Sprite e ho anche provato a variarlo. Se guardi l'allegato che ho condiviso nel post, più precisamente l'errore dovrebbe stare nel secondo if (non essendo molto esperto di Unity, questa è più una mia deduzione). Credo che il metodo Update perda il contenuto delle variabili ad ogni tick. Quindi all'interno del ciclo, nel momento in cui cambio arma, il contenuto della variabile i si perde e successivamente quando vado a verificare che arma ho equipaggiato, la variabile i torna a valere 0, quindi invece di renderizzarmi la sprite corretta, mi renderizza la Sprite della prima arma che è inserita all'interno della array (quella che ha come valore 0). Se questa mia deduzione dovesse essere corretta, non saprei davvero come fixare :oops:

Grazie ancora per l'aiuto!
 
Grazie mille per la risposta.
Dunque, ho controllato più volte l'ordine delle Sprite e ho anche provato a variarlo. Se guardi l'allegato che ho condiviso nel post, più precisamente l'errore dovrebbe stare nel secondo if (non essendo molto esperto di Unity, questa è più una mia deduzione). Credo che il metodo Update perda il contenuto delle variabili ad ogni tick. Quindi all'interno del ciclo, nel momento in cui cambio arma, il contenuto della variabile i si perde e successivamente quando vado a verificare che arma ho equipaggiato, la variabile i torna a valere 0, quindi invece di renderizzarmi la sprite corretta, mi renderizza la Sprite della prima arma che è inserita all'interno della array (quella che ha come valore 0). Se questa mia deduzione dovesse essere corretta, non saprei davvero come fixare :oops:

Grazie ancora per l'aiuto!

Allora il tuo problema sta nel fatto che non tieni conto che la funzione Update viene chiama ogni frame, quindi il valore di i permane unicamente in un frame;
La soluzione e' dichiare una variabile nella classe e non nella funzione. A questa vai poi ad assegnare il valore di i quando cambi arma cosi per i futuri Update sai che arma stai usando.

C#:
public class myclass : MonoBehaviour
{
    //.....
   int currentWeapon = -1;

   void Update()
   {
      for(/*...*)
     {
       //...
        if(/*...*/) // controlla la pressione del keycode
         {
           //...
           currentWeapon = i;
          }
      }

       if(/*...*/) controlla l'la direzione dell input
       {
         arms = Arm[currentWeapon];
       }
   }

}

Ps: la prossima volta al posto di usare un immagine, allega il tuo codice inserendolo nel tag code
 
  • Mi piace
Reazioni: LordWalrus
Stato
Discussione chiusa ad ulteriori risposte.