質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2156閲覧

オブジェクトを円形に生成配置したい

aro

総合スコア21

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/07/24 20:38

前提・実現したいこと

Unityにて弾幕STGを制作中です。
そこでキャラクターの周囲に、円形に弾を配置したいと思っています。
以下のサイトを参考にしました。
http://www.noshimemo.com/entry/2017/11/28/065615
しかし、画像のように、円の向きがおかしいです。
イメージ説明

該当のソースコード

/// <summary> /// 円卓状にPrefabを生成する /// </summary> /// <param name="prefab">生成するPrefab</param> /// <param name="count">生成数</param> /// <param name="center">中心点のオブジェクト</param> /// <param name="distance">距離</param> /// <param name="isLookAtCenter">中心点の方向に向けるか</param> private void SpawnObjectsOnRoundTable(GameObject prefab, int count, GameObject center, float distance, bool isLookAtCenter = true) { for (int i = 0; i < count; i++) { var position = center.transform.position + (Quaternion.Euler(0f, 360f / count * i, 0f) * center.transform.forward * distance); var obj = Instantiate(prefab, position, Quaternion.identity); if (isLookAtCenter) { obj.transform.LookAt(center.transform); } } }

試したこと

center.transform.forwardを、center.transform.upやcenter.transform.rightにする、
360f / count * i を xやzの位置に移動する、等試しましたが、うまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ブログの記事は3D(Y軸を中心に円形)なので、2D(Z軸を中心に円形)に書き変えないといけないですね。

csharp

1using UnityEngine; 2 3public class RoundTable2D : MonoBehaviour 4{ 5 [SerializeField] GameObject m_prefab; 6 [SerializeField] int m_count = 12; 7 [SerializeField] float m_radius = 1f; 8 9 void Update() 10 { 11 if (Input.GetMouseButtonUp(0)) 12 { 13 Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 14 pos.z = 0; 15 GameObject go = Instantiate(new GameObject(), pos, Quaternion.identity); 16 SpawnObjectsOnRoundTable(m_prefab, m_count, go, m_radius); 17 } 18 } 19 20 /// <summary> 21 /// 円卓状にPrefabを生成する 22 /// </summary> 23 /// <param name="prefab">生成するPrefab</param> 24 /// <param name="count">生成数</param> 25 /// <param name="center">中心点のオブジェクト</param> 26 /// <param name="distance">距離</param> 27 /// /// <param name="isLookAtCenter">中心点の方向に向けるか</param> 28 private void SpawnObjectsOnRoundTable(GameObject prefab, int count, GameObject center, float distance, bool isLookAtCenter = true) 29 { 30 for (int i = 0; i < count; i++) 31 { 32 var position = center.transform.position + (Quaternion.Euler(0f, 0f, 360f / count * i) * center.transform.up * distance); 33 var obj = Instantiate(prefab, position, Quaternion.identity); 34 35 if (isLookAtCenter) 36 { 37 Vector3 diff = center.transform.position - obj.transform.position; 38 obj.transform.rotation = Quaternion.FromToRotation(Vector3.up, diff); 39 } 40 } 41 } 42}

実行している様子
イメージ説明

投稿2020/07/24 22:35

編集2020/07/24 23:15
bboydaisuke

総合スコア5277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aro

2020/07/25 08:53

(Quaternion.Euler(0f, 0f, 360f / count * i) * center.transform.up * distance); までは試していたのですが、表示されずに困っていたら、 obj.transform.LookAt(center.transform); が原因だったんですね! 3D空間で見てみたら、表示されてました…(カメラから見て側面だったので、表示されてなかった) LookAtの箇所を修正したら、ちゃんと表示されました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問