回答編集履歴

2

誤字を修正

2017/10/23 22:41

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- おそらく、Z軸周りの回転が90°か、-180°か、-90°か、それ以外(無回転)かで場合分けしたいのかと推察しますが、```new Quaternion(0, 0, 90, 0)```で生成されるのは「z成分が90のクォータオン」のはずで、これは「Z軸周り90°回転を表現するクォータオン」とは異なるかと思います(ややこしい話ですみませんが、クォータオンのx、y、z、wはオイラー角がそのまま入っているわけではないのです...[Quaternionによる3次元の回転変換 - Qiita](https://qiita.com/kenjihiranabe/items/945232fbde58fab45681#quaternion)などがご参考になるでしょうか?)。
5
+ おそらく、Z軸周りの回転が90°か、-180°か、-90°か、それ以外(無回転)かで場合分けしたいのかと推察しますが、```new Quaternion(0, 0, 90, 0)```で生成されるのは「z成分が90のクォータオン」のはずで、これは「Z軸周り90°回転を表現するクォータオン」とは異なるかと思います(ややこしい話ですみませんが、クォータオンのx、y、z、wはオイラー角がそのまま入っているわけではないのです...[Quaternionによる3次元の回転変換 - Qiita](https://qiita.com/kenjihiranabe/items/945232fbde58fab45681#quaternion)などがご参考になるでしょうか?)。
6
6
 
7
7
 
8
8
 

1

eulerAnglesはプラスの角度を返すようなので、それを考慮してコード例を追加

2017/10/23 22:41

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  オイラー角からのクォータニオン生成は[Euler](https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html)を使うのが便利かと思います。ひとまず3カ所の姿勢判定部分を```if (transform.rotation == Quaternion.Euler(0, 0, 90))```の形にしてみて、どうなるか確認されるのがよいのではないでしょうか。
10
10
 
11
- あるいは、逆に```transform.rotation```からオイラー角を抽出する形にして、```if (Mathf.Approximatelytransform.rotation.eulerAngles.z, 90))```でもいいかもしれません(ついでに==で比較する代わりに[Approximately](https://docs.unity3d.com/ScriptReference/Mathf.Approximately.html)を使って、もし小数の微妙な誤差が発生しても許容するようにしてみました)。
11
+ あるいは、逆に```transform.rotation```からオイラー角を抽出する形にして、```if (Mathf.Approximately(transform.rotation.eulerAngles.z, 90))```、```if (Mathf.Approximately(transform.rotation.eulerAngles.z, 180))```、```if (Mathf.Approximately(transform.rotation.eulerAngles.z, 270))```でもいいかもしれません(ついでに==で比較する代わりに[Approximately](https://docs.unity3d.com/ScriptReference/Mathf.Approximately.html)を使って、もし小数の微妙な誤差が発生しても許容するようにしてみました)。
12
12
 
13
13
 
14
14