2012-03-10 12 views
6

Sto iniziando il mio sviluppo utilizzando Unity. sto facendo qualcosa di simile:Unity3D C# calcola l'avanzamento corretto dopo la rotazione

if(Input.GetKey(KeyCode.A))newValues[1]-=this.turnSpeed*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.D))newValues[1]+=this.turnSpeed*(float)Time.deltaTime; 
    transform.Rotate(0, newValues[1], 0); 


    if(Input.GetKey(KeyCode.W))newValues[0]+=this.speed*transform.forward.z*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.S))newValues[0]-=this.speed*transform.forward.z*(float)Time.deltaTime; 


    transform.position = new Vector3(transform.position.x, transform.position.y, (float)newValues[0]); 

Così ho ruotare e posso passare, ma si muove solo nella linea Z, so che sto chiamando il movimento specifico Z. Ma con JavaScript posso fare qualcosa

 transform.forward+=this.speed*transform.forward*(float)Time.deltaTime; 

Quindi non ho bisogno di fare il nuovo processo vettoriale e copiare a una variabile indipendente e funziona come un fascino, utilizzando la rotazione e utilizzando come l'orientamento a se stesso quando è ruotato.

+0

Probabilmente è opportuno modificare il titolo e tag. Il tag unity utilizzato si riferisce al contenitore di iniezione delle dipendenze nel blocco di applicazione MS. Probabilmente ti riferisci a unity-3D, anche se questo è per i videogiochi potresti voler aggiungere un tag appropriato. – Tod

+0

Cosa succede se metti 'transform.forward + = this.speed * transform.forward * (float) Time.deltaTime;' nel codice C#? Javascript e C# compilano ciascuno lo stesso linguaggio intermedio .NET, quindi quasi tutto possibile in uno è possibile nell'altro, se codificato in modo un po 'diverso. –

+0

Non funziona, è una variabile di sola lettura – Lefsler

risposta

7

si può fraintendere l'utilizzo di transform.forward. transform.forward è solo un vettore per dirti in che direzione si trova FaceObject, dipende da transform.rotation.

Se si desidera spostare il GameObject, utilizzare sempre transform.position:

transform.position += this.speed * transform.forward * (float)Time.deltaTime; 
+1

Grazie, ma come implemento la rotazione? – Lefsler

+2

thread molto vecchio, ma vorrebbe farlo rivivere come hai detto "Se vuoi spostare il tuo GameObject, usa sempre transform.position" in realtà se l'oggetto del gioco è rigidbody allora dovrebbe essere spostato aggiungendo forza come modifica diretta potrebbe trasformare portare a comportamenti non realistici. Ma per i corpi cinematici la tua affermazione è vera – Eklavyaa

+0

hai ragione, @Eklavyaa – Chchwy

Problemi correlati