[過去ログ] 【ゲームエンジン】Unityなんでも質問スレpart1 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
544
(2): 名前は開発中のものです。 [] 2020/07/20(月) 17:58:01.54 ID:hNMBd3gW(2/3) AAS
>>421
421(1): 名前は開発中のものです。 [] 2020/07/15(水) 14:34:23.38 ID:WYOW0SRX(1/4) AAS
クォータニオンから角度を求める方法について質問したいです。
クォータニオンの各変数にはcos(θ/2)やsin(θ/2)が現れますが、transform.rotation.ToAngleAxisなどでクォータニオンからθを求める際、θ=360°+αとθ=360°-αの判別が付きませんよね?
例えば、370°回転させたとき、返り値として370(=360+10)または10が欲しいのですが、実際には350(=360-10)が返されます。
物体を360°以上回転させる場合、どうやってその角度を取得すればいいのでしょうか?
よろしくお願いします。
です。解決しましたので報告します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoxMove : MonoBehaviour
{
//ハンドルの GameObject を指定させる
public GameObject Handle;

//ハンドルの角度と回転軸
private float HandleAngle;
private Vector3 HandleAxis;

void Update()
{
//ハンドルの角度と回転軸を取得
Handle.transform.localRotation.ToAngleAxis(out HandleAngle, out HandleAxis);

//偶数周目では回転軸の向きが反転するので、それを検知して角度を修正する
if(HandleAxis.x < 0)
{
HandleAngle = 360 - HandleAngle;
}

//ハンドルの角度に応じて箱を移動させる
this.transform.localPosition = new Vector3(0, 0, HandleAngle);
}
}
545: 名前は開発中のものです。 [] 2020/07/20(月) 17:58:30.46 ID:hNMBd3gW(3/3) AAS
>>544 続き
Debug.Log で HandleAngle と HandleAxis を同時に表示させたら気付きました。
ハンドルを回転させていくと、360°を越えるときに

...
HandleAngle = 358, HandleAxis = (1, 0, 0)
HandleAngle = 359, HandleAxis = (1, 0, 0)
HandleAngle = 359, HandleAxis = (-1, 0, 0)
HandleAngle = 358, HandleAxis = (-1, 0, 0)
...

のように、HandleAxis の向きが反転していました。なので、HandleAxis が反転したとき(HandleAxis.x が負のとき)は逆回転になっていると解釈して、回転角度は360から HandleAngle を引いたものとしました。
これで所望の挙動が得られました。皆さんのご参考になれば幸いです。
596: 名前は開発中のものです。 [] 2020/07/22(水) 21:44:25.03 ID:aQLU6RRN(1) AAS
>>584
584(1): 名前は開発中のものです。 [sage] 2020/07/22(水) 18:15:56.38 ID:/FsiL1D8(1) AAS
そのやりかたじゃできないって最初から言われてんじゃん
エディターのTransform見てできると思い込んでるんだろうけど
はい、 >>544 のやり方でできました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s