Creare Videogiochi - Game Developer

Versione completa: Controllo Player che non funziona benissimo...
Al momento stai visualizzando i contenuti in una versione ridotta. Visualizza la versione completa e formattata.
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. Huh

Vabbè... scusate, ho risolto con una intuizione dell'ultimo secondo: ELSE IF, se può servire agli altri.

:-)

Alla prossima.