はじめに
右手と左手間のベクトルに合うようにいい感じにコントローラを回転させています。
むにむに pic.twitter.com/5VYClMBWod
— がとーしょこら@VRChat (@gatosyocora_vrc) November 10, 2019
これはUnityでスクリプトからオブジェクトを回転させるときに
そのオブジェクトが持つベクトルとあるベクトルの向きを同じになるように回転させました。
たまに使うので備忘録です。
サンプルコードとイメージ図
p3とp4のベクトルの向きがp1とp2のベクトルの向きに合うようにp3とp4を持つオブジェクトを回転させます。
VectorRotationSample.cs
// Vector3 p1, p2, p3, p4;
// GameObject target;
Vector3 refVec = (p1 - p2).normalized; // これと同じになるように
Vector3 vec = (p3 - p4).normalized; // これを動かす(p3, p4はtargetに含まれる任意の2点)
Quaternion rot = Quaternion.FromToRotation(refVec, vec);
target.transform.rotation = rot * target.transform.rotation; // 左から掛ける