2012-03-10 6 views
6

Unityを使用して開発を開始します。 私はそのような何かをやっている:Unity3D C#回転後に正順を計算する

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

だから私は、回転と私は移動することができますが、それは私がZ特定の動きを呼んでいる知っている、ちょうどZラインに移動します。 しかし、JavaScriptを使用して、私はので、私は新しいベクトル・プロセスを実行する必要があり、別の変数にコピーし、それが魔法のように動作し、回転を使用したときに、自分自身へのオリエンテーションとして使用していない何か

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

を行うことができますそれは回転しています。

+0

をあなたはおそらく、あなたのタイトルとタグを編集する必要があります。使用される単位タグは、MSアプリケーションブロック内の依存性注入コンテナを参照します。おそらくunity-3Dを指しているでしょう。これがゲームのためのものであれば、適切なタグを追加したいかもしれません。 – Tod

+0

'transform.forward + = this.speed * transform.forward *(float)Time.deltaTime;'をC#コードに置くとどうなりますか? JavascriptとC#はそれぞれ同じ.NET中間言語にコンパイルされるため、少し異なる方法でコード化されていれば、1つの言語で可能なものはすべて他の言語でも可能です。 –

+0

それは仕事をしない、それは読み取り専用の変数です – Lefsler

答えて

7

あなたはtransform.forwardの使い方を誤解するかもしれません。 transform.forwardは、あなたのgameObjectがどんな方向を向いているかを伝えるベクトルです。それはtransform.rotationに依存します。

あなたのゲームオブジェクトを移動したい場合は、必ずtransform.position使用:

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

ありがとう、しかし、私はどのように回転を実装する? – Lefsler

+2

非常に古いスレッドですが、あなたが「あなたのGameObjectを移動したいなら、常にtransform.positionを使用してください」というように、それを復活させたいのですが、実際には剛体です。非現実的な行動につながります。しかし、キネマティックボディについては、あなたの声明は真実です – Eklavyaa

+0

あなたは正しいです、@エクラボア – Chchwy

関連する問題