2017-01-29 10 views
5

私は車を操縦するために回転式リモコン(回転のみを知っている)を使用するゲームを作成しています。私はQuaternion(これはコントローラの出力です)をステアリングホイールの回転に変換することに問題があります。これは私が試したすべてのものに最も近い作業です(transform.localRotationはステアリングホイールの回転です):クォータニオンの回転をハンドルの動きに変換するにはどうすればいいですか?

void Update() { 

    transform.localRotation = GvrController.Orientation; 

    transform.localRotation = new Quaternion(0.0f, 0.0f, transform.localRotation.z, transform.localRotation.w); 

} 

これは明らかに良い解決策ではなく、うまく機能しません。私がやろうとしていることを非常に簡単に視覚化しています: enter image description here コントローラのデフォルトの向きは、写真のように前方を向いています。

基本的には、回転の原因となる軸以外の軸(画像上の軸1)をすべてスキップしてステアリングホイールに適用する方法が問題です。私はこれをどうやってできるのか知っていますか?

EDIT: 適切な視覚化がなければ問題を説明することは難しいので、コントローラーの写真を撮って軸を描きました。

これは、コントローラのデフォルトの方向です:

enter image description here

そして、これは、それがそれにマーク軸で開催されています方法です:

enter image description here

+0

これはおそらく、入力と予想される出力を与えて、コントローラがあなたに与える回転をよりよく理解するのに役立ちます。 – FINDarkside

+0

これはデバッグが面倒です。おおよその予想される出力角度でテストを記録し、MatlabやPython Spyderのようなプログラミング環境で正しい数式を "リバースエンジニアリング"し、希望の言語/フレームワークに移植することをお勧めします。 – NikoNyrh

+0

オイラー変換を使って録音してもらえますか? –

答えて

2

使用Quaternion.EulerQuaternion.eulerAnglesを。 Vector3とは異なり、オイラー関数の次数はz、x、yです。 EulerAnglesは角度を度で返します(rotation.xはその軸の四元数を返します)。お使いのコントローラの軸は、あなたがそれをyアップzのフォワード例えばない場合は、他の方向で実験する必要があるかもしれません設定されている方法に応じて

Quaternion rot = GvrController.Orientation; 
transform.localRotation = Quaternion.Euler(rot.eulerAngles.z, 0, 0); 

:あなたのような何かをしたいので、オイラー関数は角度を期待します

transform.localRotation = Quaternion.Euler(rot.eulerAngles.x, 0, 0); 

または

transform.localRotation = Quaternion.Euler(0, 0, rot.eulerAngles.z); 

など

。どのシステムが使用されているのかはすぐに明らかになるはずです。

また、ステアリングホイールが親になっていない場合、localRotationではなく回転を使用します。

+0

私は以前と同じ問題を抱えています:コントローラはステアリングホイールのように回転しているだけでなく、後方にも回転しています。 –

+1

私はコントローラーの方向を使用することを意味しました。投稿が更新されました。 z軸が間違っている場合は、他の軸を試してみてください。 – Absinthe

+0

まだ動作しません。それは非常に矛盾した結果をもたらします。ステアリングホイールは回転の方向を変えたり、コントローラの回転方向を変えずに止まります。私はすべての軸を試しました、そして、それらのどれもがステアリングホイールを回転させたい軸に対応しているようです。 –

関連する問題