[過去ログ] 【3Dゲームエンジン】Unity質問スレッド31 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
658(1): 2017/10/08(日)07:49 ID:mMnsnx53(1/3) AAS
3Dの座標でAオブジェクトとBオブジェクトのある角度の関係にある時、
Aオブジェクトを回転された時、Bオブジェクトも同じ関係で回転させたいのですが、
上手く行きません。
詳細は画像参照お願い致します。
だいぶ悩んでます助けてください。
画像リンク
コードの内容
moveQuaternion = BのTransform.rotation * Quaternion.Inverse(AのTransform.rotation)
Aを回転させた後
AのTransform.rotation * moveQuaternion
663: 2017/10/08(日)13:02 ID:fTBqzW3p(1) AAS
>>658
こんな感じか?
public class RotationFollower : MonoBehaviour {
public Transform target;
private Quaternion prev;
void Start () {
if (target != null) {
prev = target.rotation;
}
}
void Update () {
if (target != null) {
var rot = target.rotation * Quaternion.Inverse (prev);
transform.rotation = rot*transform.rotation;
prev = target.rotation;
}
}
}
重要なのはQuaternionの掛け算は、前後関係入れ替えると回転の適用順が逆になり、結果が違うということ。
まずワールド座標系でAの回転量だけ回す、次に回転後の座標系でBの回転を適用する必要がある。
transform.rotation = rot*transform.rotation;
↑この行を
transform.rotation *= rot;
に変えて挙動を比較してみると結果の違いが観測できるだろう。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.030s