Controllo Player che non funziona benissimo... - 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: Controllo Player che non funziona benissimo... (/thread-Controllo-Player-che-non-funziona-benissimo) |
Controllo Player che non funziona benissimo... - kaanello - 10-12-2012 Ciao a tutti, mi sono iscritto la scorsa settimana su questo Forum perché affascinato da Unity 3D. Ho iniziato con i videotutorial di Marf, che ringrazio, mi sono spulciato i passi della Doc ufficiale sul sito Unity e fatto il giro di tutti i vermi su Youtube :-) Dopo di ché ho pensato di partire dalle cose semplici: ho preso un modello 3D con un bel po' di animazioni e l'ho messo nella scena, insieme ad un terrain, una Camera e ad una Directional light. Ho creato uno script per la camera, che mi seguisse il Player sempre in 3a persona (funziona) e poi sono passato ai controlli del personaggio... ma ho un problema. Questo il codice: ______________________ using UnityEngine; using System.Collections; public class Player : MonoBehaviour { public float movementSpeed = 1; public float turningSpeed = 60; void Update() { // CON LE FRECCE "destra" E "sinistra" GIRA A DX O SX if (Input.GetAxis("Horizontal") != 0) { animation.CrossFade("walking"); float horizontal = Input.GetAxis("Horizontal") * turningSpeed * Time.deltaTime * 5; transform.Rotate(0, horizontal, 0); } else { animation.CrossFade("standing"); } // SE SI PREME LA FRECCIA "sù" CAMMINA if (Input.GetKey("up")) { animation.CrossFade("walking"); float vertical = Input.GetAxis("Vertical") * movementSpeed * Time.deltaTime / 3; transform.Translate(0, 0, vertical); } else { animation.CrossFade ("standing"); } // SE SI PREME LA FRECCIA "giù" SI METTE A CORRERE if (Input.GetKey("down")) { animation.CrossFade("running"); float vertical = Input.GetAxis("Vertical") * movementSpeed * Time.deltaTime / 3; transform.Translate(0, 0, vertical); } else { animation.CrossFade ("standing"); } // SE SI PREME LO "spazio" SALTA if (Input.GetKey("space")) { animation.CrossFade("jumping"); float vertical = Input.GetAxis("Vertical") * movementSpeed * Time.deltaTime / 3; transform.Translate(0, 0, vertical); } else { animation.CrossFade ("standing"); } } } _______________________ Pensavo che controllasse, ad ogni frame, tutte le IF... ma, sorpresa, mi fa sempre e soltanto l'ultima IF (in questo caso, il Jumping). Gli altri tasti, per dirlo in francese aulico, non li caca per niente. :-) Dove sbaglio? Grazie. P.S: in realtà, della prima IF, applica la rotazione, ma senza animazione... mentre se lascio solo lei, come IF, togliendo tutte le altre, funziona a meraviglia. Vabbè... scusate, ho risolto con una intuizione dell'ultimo secondo: ELSE IF, se può servire agli altri. :-) Alla prossima. |