1. ホーム
  2. c#

[解決済み] Unity - クォータニオンからベクターへの変換3

2022-02-07 23:59:26

質問

このような質問をよく見かけますが、困ったことに、質問が意味をなしていないのです。これは、「リンゴをレンガに変えるにはどうしたらいいですか?

しかし、たいていの場合、質問の根底には意味があり、疑わしいのはその言葉遣いです。

私がやりたいのは、これです。

  • ワールド空間の参照フレームに、クォータニオンRで表される回転を持つオブジェクトがある。
  • そのオブジェクトがそのローカルな参照フレームに対して前方に、つまりそのローカルなZ軸に沿って名目上の量だけまっすぐ移動したとすると...
  • ... その(正規化された)成分が、世界基準フレームでのその動きを表す Vector3 は何でしょうか?

さて、私は 考える 答えは

    Vector3 ans = R * Vector3.forward;

これは正しいのか、正しいとすればその理由は?(正しくないのであれば、その答えは?)

解決方法は?

はい、その通りです。

Quaternion * Vector3 は、与えられたベクトルを受け取り、与えられた回転に従ってそれを回転させます。

ということは、もしあなたの R は基本的にオブジェクトの 世界空間 transform.rotation を実行すると、オブジェクトのローカルな前方(正のZ)ベクトルが世界空間座標のベクトルとして出力されます。


また、直接オブジェクトの transform.forward ベクトルは、基本的に transform.rotation * Vector3.forward