###前提・実現したいこと
ここに質問したいことを詳細に書いてください
Unityでオブジェクトをランダムに生成するスクリプトをC#で書きたいのですが手こずっています。
やりたいことは、
・高さYのみを固定してXとZのみランダムにオブジェクトを生成
・上限無しに数秒毎に生成されていく(出来れば上限を付けるやり方も知りたいです。)
どうかよろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
ベストアンサー
C#からオブジェクトを生成する場合はプレハブを使うことになると思います。
プレハブについては以下のサイトが参考になると思います。
Unity - マニュアル: プレハブ
複製が簡単にできる!Unityでプレハブ(Prefabs)を作る方法
C#から動的にオブジェクトをプレハブから生成するには以下のようにします。
ObjectGenerator.cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ObjectGenerator : MonoBehaviour { 6 [SerializeField] 7 GameObject prefab; 8 9 void Start(){ 10 Instantiate (prefab, new Vector.Zero); 11 } 12}
プレハブからオブジェクトを生成する部分はInstantiate (prefab, new Vector.Zero);
の部分です。
Instantiate
関数はInstantiate(プレハブ,ポジション,ディレクション)
の3つ引数があります。
詳しくはUnity - 実行時のプレハブのインスタンス化が参考になると思います。
ランダムな位置に生成する場合は以下のようにします。
ObjectGenerator.cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ObjectGenerator : MonoBehaviour { 6 [SerializeField] 7 GameObject prefab; 8 9 void Start(){ 10 float x = Random.Range(0f,9f); 11 float y = 0; 12 float zRandom.Range(0f,9f); 13 Vector3 position = new Vector3(x,y,z); 14 Instantiate (prefab, new Vector3.Zero); 15 } 16}
毎秒生成する場合は以下のようにします。
ObjectGenerator.cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ObjectGenerator : MonoBehaviour { 6 [SerializeField] 7 GameObject prefab; 8 9 void Start(){ 10 InvokeRepeating("Generate", 1, 1); 11 12 } 13 void Generate(){ 14 float x = Random.Range(0f,9f); 15 float y = 0; 16 float zRandom.Range(0f,9f); 17 Vector3 position = new Vector3(x,y,z); 18 Instantiate (prefab, new Vector3.Zero); 19 } 20 21}
さらに上限を付けるには以下のようにします。
ObjectGenerator.cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ObjectGenerator : MonoBehaviour { 6 [SerializeField] 7 GameObject prefab; 8 int count = 0; 9 int max = 10; //上限 10 11 void Start(){ 12 InvokeRepeating("Generate", 1, 1); 13 14 } 15 void Generate(){ 16 if(count == max) return; 17 float x = Random.Range(0f,9f); 18 float y = 0; 19 float zRandom.Range(0f,9f); 20 Vector3 position = new Vector3(x,y,z); 21 Instantiate (prefab, new Vector3.Zero); 22 count++; 23 } 24 25}
長くなってしまってすいません。
投稿2017/10/31 13:58
総合スコア354
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/31 14:03