2012-03-10 10 views
6

Rozpoczynam mój rozwój przy użyciu Unity. robię coś takiego:Unity3D C# obliczyć prawidłowy do przodu po obrocie

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]); 

Więc ja mogę obracać i poruszać, ale porusza się tylko w linii Z, wiem, że dzwonię specyficzny ruch z. Ale JavaScript mogę zrobić coś

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

więc nie trzeba robić nowego procesu wektorowej i skopiować do osobnej zmiennej i działa jak czar, stosując rotację i stosując jako orientacji do siebie, gdy jest obrócony.

+0

Powinieneś raczej edytować tytuł i tag. Stosowany znacznik jedności odnosi się do pojemnika wstrzykiwania zależności w bloku aplikacji MS. Prawdopodobnie odnosisz się do jedności-3D, także jeśli jest to gra, możesz dodać odpowiedni tag. – Tod

+0

Co się stanie, jeśli wstawisz 'transform.forward + = this.speed * transform.forward * (float) Time.deltaTime;' w kodzie C#? Skrypty Javascript i C# kompilują się do tego samego pośredniego języka .NET, więc prawie wszystko, co możliwe w jednym, jest możliwe w drugim, jeśli kodowane jest trochę inaczej. –

+0

To nie działa, jest zmienną tylko do odczytu. – Lefsler

Odpowiedz

7

możesz źle zrozumieć użycie transform.forward. transform.forward to tylko wektor, który powie Ci, w jakim kierunku zmierzy się twoja strona gameObject, zależy to od transform.rotation.

Jeśli chcesz przenieść GameObject zawsze używać transform.position:

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

Dzięki, ale jak zrealizować rotację? – Lefsler

+2

bardzo stary wątek, ale chciałbym go ożywić, jak już wspomniałeś: "Jeśli chcesz przenieść swój GameObject, zawsze używaj transform.position", jeśli obiekt gry jest rigidbody to należy go przesunąć dodając siłę jako bezpośrednio modyfikującą transformację prowadzić do nierealistycznych zachowań. Ale dla ciał kinematycznych twoje stwierdzenie jest prawdziwe – Eklavyaa

+0

masz rację, @Eklavyaa – Chchwy

Powiązane problemy