前提・実現したいこと
RigidbodyのノーマルメソッドとRelative系のメソッドを使用したときの挙動がわかりません。
ご教示お願い致します。
試したこと
まず、Rigidbody.AddRelativeForceですが、
ローカル座標における力ベクトルを指定するとのことだったので、
this.transform.fowardとかを指定すべきメソッドと解釈しました。
Cubeの回転をあえて、X:0, Y:45, Z:0に設定しておいて、下記コードを実行したら、
図のような想定外の方向に移動してしまいました。
(自分の想定では、CubeのZ軸方向に進む想定でした)。
ちなみにコメントのAddForceだと想定した通りにCubeのZ軸方向に移動します。
(しかし、これも微妙に納得いきません。なぜならば、Rigidbody.AddForceは、
ワールド座標のベクトルを引数に入れるべきメソッドのはずなのに、ローカル座標のベクトル(transform.forward)を入れて、
その方向に動いてしまうので、これが正しい挙動なのか?と思ってしまいます。)
C#
1 void FixedUpdate(){ 2 //rb.AddForce(this.transform.forward * speed * Time.deltaTime); 3 rb.AddRelativeForce(this.transform.forward * speed * Time.deltaTime); 4 }
Rigidbody.AddRelativeTorqueに関しても同様です。
Cubeの回転をあえて、X:45, Y:0, Z:0に設定しておいて
下記コードを実行したら、よくわからない回転をします。
これも同様にコメントのAddTorqueだと、自身のthis.transform.up、つまりY軸を中心にした回転になりますが、
本当はこの回転こそが、AddRelativeTorqueで実現される回転なのではないかと思っていました。
そして、逆にRigidbody.AddTorqueは、
ワールド座標のベクトルを指定するはずなのに、this.transform.upというローカル座標を指定して、そのローカル軸を中心に回転できてしまう理由もわかりません。
C#
1 void FixedUpdate(){ 2 //rb.AddTorque(this.transform.up * speed * Time.deltaTime); 3 rb.AddRelativeTorque(this.transform.up * speed * Time.deltaTime); 4 }
疑問点をまとめると、以下4点です。
・Rigidbody.AddForceは、本来ワールド座標のベクトルを指定するはずなのに、 ローカル座標のベクトルを指定しても、ローカル座標ベクトルの方向に進む。 ・Rigidbody.AddRelaviteForceに、ローカル座標のベクトルを指定しても、ローカル座標ベクトルの方向に進まず、 よくわからない方向に進む。 ・Rigidbody.AddTorqueは、本来ワールド座標のベクトルを指定するはずなのに、 ローカル座標のベクトルを指定しても、ローカル座標ベクトルを軸にして回転する。 ・Rigidbody.AddRelativeTorqueに、ローカル座標のベクトルを指定しても、 ローカル座標ベクトルを軸にしないで回転する(よくわからない回転をする)。
この4点の疑問に関して、ご教示お願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/01/10 17:49
2019/01/10 21:59
退会済みユーザー
2019/01/11 14:05