前提・実現したいこと
円形に弾オブジェクトを配置し、弾を敵の方向に向かせ、そこから30度回転をかけてます。
しかし、1個目だけ何故か向いている方向がおかしいです。
該当のソースコード
C#
1public IEnumerator Generate(GameObject prefab, int count, GameObject center, float distance, bool isLookAtCenter = true) 2 { 3 for (int i = 0; i < count; i++) 4 { 5 var position = center.transform.position + (Quaternion.Euler(0f, 0f, (360f / count) * i) * center.transform.up * distance); 6 var obj = Instantiate(prefab, position, Quaternion.identity); 7 8 if (isLookAtCenter) 9 { 10 //中央を向かせる 11 Vector3 diff = center.transform.position - obj.transform.position; 12 //※ここが怪しい 13 obj.transform.rotation = Quaternion.FromToRotation(Vector3.up, diff); 14 15 //30度ずらす 16 Quaternion rot = Quaternion.AngleAxis(30, Vector3.forward); 17 Quaternion q = obj.transform.rotation; 18 obj.transform.rotation = q * rot; 19 } 20 }
試したこと
Debug.Log()で※印の箇所のobj.transform.rotationを見てみると、
一つ目だけ(1.0, 0.0, 0.0, 0.0)とxに値が入っており、
2つ目以降は
(0.0, 0.0, 1.0, -0.1)
(0.0, 0.0, 1.0, -0.3)
(0.0, 0.0, 0.9, -0.4)
となっており、xは0で、zとwに値が入っていました。
なので、中央を向かせた時点で既におかしいようです。
ただ、30度ずらさない場合は、向きはおかしくないです(該当箇所は真上を向いてるので)
Quaternion.FromToRotationに問題があるように思っております。
ジンバルロック?とか詳しくわからないのですが、そういうのがあるのでしょうか…
解決方法と、可能でしたら原因も教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/27 11:08 編集