• 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
Gestione Salto
#1
Smile 
Buongiorno a tutti,
vi sottopongo un problema che da qualche giorno mi sta tenendo occupato. 
Anticipo che da poco mi sto approcciando al mondo di Unity3D, principalmente sulla parte di programmazione.
Ci sono quindi delle logiche e dei concetti che ancora non conosco Smile.

Il mio problema è legato alla gestione del "salto" di un personaggio 3D. 
Sono in possesso di un'animazione FBX di un personaggio che semplicemente fa un salto in avanti. Ho importato quest'animazione nel mio progetto e da script ho associato l'azione salta all'evento da tastiera.
Quindi quando schiaccio il tasto "spazio", il personaggio ovviamente salta in avanti.
Fin qui tutto semplice.

Ecco il tema: vorrei capire se in generale è corretto che l'azione del salto venga gestita da animazione o se invece è una cosa che va controllata da script.
Io penso che sia più corretto gestire tutto da script (anche perché in questo modo avrei modo di impostare una qualsiasi forza opposta e non), ma onestamente non ho idea di come si faccia e, soprattutto, non saprei come settare l'fbx affinché Unity non tenga conto dello spostamento in avanti presente nell'animazione stessa.


Voi sapete aiutarmi/consigliarmi?

Se non ho espresso bene il tema (e ho dei dubbi molto forti che sia così Cool ), fatemelo sapere che ci riprovo  Big Grin

Grazie mille a tutti
 
Rispondi
#2
Ciao ci sono diversi approcci per gestire varie situazioni, dipende da cosa devi fare. Sicuramente il metodo che hai adottato non è sbagliato, anzi penso sia il modo più corretto per gestire i movimenti di un personaggio nello spazio.
Quello che devi settare via script è l'azione e l'animazione associata da compiere ad un input , ad esempio saltare alla pressione di un tasto oppure camminare quando si muove in avanti la levetta analogica di un controller.
Ovviamente all'occorrenza puoi controllare la lunghezza del salto e la direzione aggiungendo una forza via script.

Per le animazioni di un personaggio ti consiglio di studiarti per bene Unity Mecanim e i Blend Tree per le transizioni da una animazione all'altra (cammina, corri, ruota).

Per completezza di informazione puoi disattivare i movimenti nello spazio presenti nell'animazione disabilitando il check box "Apply root motion" nel componente Animator.
Inoltre quando importi l'fbx puoi fare il bake della rotazione, posizione y e posizione xy, ciò significa che quando l'animazione viene riavviata riparte dallo stesso punto(localmente) in cui è stato fatto il bake.
 
Rispondi
#3
Ciao, grazie per la risposta.
Attualmente nel mio progettino succede questo: quando faccio saltare il personaggio, questo ovviamente salta. Se successivamente al salto gli invio l'input di camminare, il personaggio cammina ma solo dopo aver effettuato un "salto" all'indietro, in quello che io penso sia il punto 0:0.
Per risolvere il problema dovrei probabilmente spostare le coordinate di tante unità quante sono quelle avanzate durante il salto, ma la vedo una gestione poco pulita. 

Non sono molto esperto quindi i vostri suggerimenti saranno "oro" per me Smile

Grazie mille
 
Rispondi
#4
Assicurati che nel componente Animator sia abilitato "Apply Root Motion" e disattiva tutti i bake nelle animazioni (gli fbx).
Controlla anche il loop, al salto non deve esserci mentre all'animazione cammina si.
Mi sembra strano che faccia il salto all'indietro, sicuro che non riceva un input che riattiva l'animazione salto? Controlla la finestra Animator metro il gioco è in esecuzione per vedere la successione degli stati.

Riposizionarlo via script non se ne parla se non vuoi che si muova come Michael Jackson Big Grin
 
Rispondi
#5
il salto all'indietro che descrivo è come se il personaggio si riposizionasse nel suo centro. 
Cioè, l'animazione (fbx) durante il salto lo sposta in avanti, ma il suo position rimane ovviamente invariato. 
Quindi quando ha inizio l'azione "cammina" essendo il position differente rispetto all'ultima posizione assunta dall'animazione "salto", crea proprio l'effetto Michael Jackson.

Comunque, ti ringrazio per i consigli. Ora provo a fare qualche test e ti faccio sapere.
 
Rispondi
#6
Probabilmente è attivo il bake della posizione xz
 
Rispondi
#7
(07-03-2017, 01:22 PM)carloss Ha scritto: Probabilmente è attivo il bake della posizione xz

Ciao,
ho fatto dei test, ma ora mi trovo con un altro problema.
Mi sono accorto che non tutte le animazioni erano impostate con Rig:Humanoid. Ho quindi corretto l'anomalia e successivamente mi sono occupato del bake delle posizioni.

Dalla preview nell'animator noto che il mio player si comporta correttamente, ma quando vado a eseguire il gioco, il player rimane fermo nella classica posa a T. Questo non accade se riporto il Rig su Generic.
Scusa la noia, ma sapresti dirmi perché succede questo?

Grazie mille
 
Rispondi
#8
Difficile dirlo, le variabili sono troppe,

Innanzitutto assicurati che il componente Animator non si disabilitato o che non venga disabilitato runtime da uno script. Mentre il gioco è in esecuzione, seleziona il personaggio e osserva nella finestra Animator la successione degli stati e che sia associata una animazione ad ogni stato.

Riguardo il rig, devi scegliere humanoid quando il personaggio ha sembianze umane. Devi creare il rig (avatar... che in unity viene indicato con un manichino) prima di tutto per il personaggio che hai inserito nella scena.
Quando vuoi aggiungergli una animazione, devi associare all'animazione l'avatar che hai ottenuto in precedenza dal personaggio nella scena. Per farlo, nella finestra rig seleziona Humanoid e poi "Import from other avatar". Ovviamente in questo caso sia personaggio nella scena che animazione devono avere lo stesso rig.
Se non hanno lo stesso rig devi creare un nuovo avatar e poi associare manualmente le ossa (bones).
 
Rispondi
#9
(08-03-2017, 06:13 PM)carloss Ha scritto: Difficile dirlo, le variabili sono troppe,

Innanzitutto assicurati che il componente Animator non si disabilitato o che non venga disabilitato runtime da uno script. Mentre il gioco è in esecuzione, seleziona il personaggio e osserva nella finestra Animator  la successione degli stati e che sia associata una animazione ad ogni stato.

Riguardo il rig, devi scegliere humanoid quando il personaggio ha sembianze umane.  Devi creare il rig (avatar... che in unity viene indicato con un manichino) prima di tutto per il personaggio che hai inserito nella scena.
Quando vuoi aggiungergli una animazione, devi associare all'animazione l'avatar che hai ottenuto in precedenza dal personaggio  nella scena. Per farlo, nella finestra rig seleziona Humanoid e poi "Import from other avatar". Ovviamente in questo caso sia personaggio nella scena che animazione devono avere lo stesso rig.
Se non hanno lo stesso rig devi creare un nuovo avatar e poi associare manualmente le ossa (bones).

Evidentemente devo capire meglio come funziona l'Animator e le animazioni in Humanoid.
Lato script non mi sembra che ci siano errori.
Sostanzialmente ho dichiarato queste variabili


Codice:
    private Animator anim;
    private CharacterController controller;
 

inizializzate poi nello Start()

Codice:
    void Start()
    {
        anim = gameObject.GetComponentInChildren<Animator>();
        controller = GetComponent<CharacterController>();

    }


e in Update faccio

Codice:
    void Update()
    {


        if (Input.GetKey(KeyCode.W))
        {
            anim.SetInteger("CamminaCorri", 1);
        }
       
    }

in questo momento parte solamente l'animazione da "Fermo". 
se provo a far camminare il player questo assume la classica posa a T.


Dove posso trovare del materiale per poter comprendere meglio come usare le animazioni?

Grazie mille di tutto
 
Rispondi
#10
Devi studiarti unity mecanim animation system. Puoi cominciare dalla documentazione ufficiale sfogliando la sezione animazioni
https://unity3d.com/learn/tutorials/topics/animation
https://docs.unity3d.com/Manual/AnimationSection.html

Su youtube ci sono parecchi video su come animare un character, la cosa positiva di unity è che c'è parecchio materiale di supporto.

Per imparare ti consiglio di iniziare ad animare oggetti, ad esempio una porta che si apre e chiude tramite unity mecanim e capire il funzionamento della macchina a stati.
Poi passa ad animare un personaggio e a utilizzare i blend tree.
 
Rispondi
  


Vai al forum:


Browsing: 4 Ospite(i)