回答編集履歴
2
誤字を修正
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のクォータ
|
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はプラスの角度を返すようなので、それを考慮してコード例を追加
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.Approximately
|
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
|
|