10-12-2012, 12:05 PM
(Questo messaggio è stato modificato l'ultima volta il: 10-12-2012, 12:12 PM da kaanello.)
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.
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.