回答編集履歴

1

FromToRotationについて追記

2022/07/17 15:52

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -24,3 +24,24 @@
24
24
  }
25
25
  }
26
26
  ```
27
+
28
+ ## FromToRotationについて
29
+
30
+ ![図](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-18/da343966-2279-49b3-8434-0fd6029b7673.png)
31
+
32
+ 水色が`obj1.transform.forward`、マゼンタ色が`obj2.transform.position - obj1.transform.position`です。
33
+ `Quaternion.FromToRotation(obj1.transform.forward, obj2.transform.position - obj1.transform.position)`によって水色をマゼンタ色に重ねるよう回転するクォータニオンが得られ、黄色がその回転軸です。
34
+ 黄色は水色とマゼンタ色の両方に垂直なベクトルで、これは水色とマゼンタ色の外積の向きとなります。
35
+
36
+ そして、このクォータニオンを現在の`obj1.transform.rotation`と組み合わせることで、現在の姿勢からさらに回転させた姿勢を求めて`obj1.transform.rotation`に再設定しています。
37
+ 「[Quaternion-operator * - Unity スクリプトリファレンス](https://docs.unity3d.com/ja/current/ScriptReference/Quaternion-operator_multiply.html)」には...
38
+
39
+ > lhs と rhs の回転を組合わせます。
40
+ >
41
+ > lhs * rhs の積の値で回転させることは、lhs を最初に、それから rhs というように 2 つの回転を順番に行うことと同じです。つまり、回転は、非可換性で、lhs * rhs は rhs * lhs と異なる回転を表すということに気を付けてください。
42
+
43
+ との解説があり、ご参考になるかと思います。
44
+
45
+ 余談ですが、上記引用の「lhs を最初に、それから rhs」というのが人によってはしっくりこないかもしれません。
46
+ 実は私はどちらかというとしっくりこない側のクチでして、「[【Unity】 Quaternionの回転順の話 - エフアンダーバー](https://www.f-sp.com/entry/2020/06/26/175640)」の解釈に賛同する方ではあります。
47
+ ですが「[[Unity]Quaternionの回転、左が先か?右が先か? - Qiita](https://qiita.com/yaegaki/items/4d5a6af1d1738e102751)」にあるように、lhsとrhsのどっちが先に見えるか...は回転前と回転後のどちらの姿勢に注目するかで違ってくるものであり、ご質問者さんにとってしっくりくるとらえ方でいいかと思います。ただし他の人とコードについて意見交換する場合は、もしかすると相手は自分と異なる派閥のとらえ方をしているかもしれないことを頭の隅にでも覚えておいていただくと、コミュニケーションが円滑になるかもしれません。