2016-06-16 6 views
0

シーンが始まるときに複数のランダムな位置に複数のランダムなオブジェクトを生成したい。どうしたらいいですか?これは私のコードですが、オブジェクトは1つしか表示されません。シーンが開始されたときにのみいくつかのランダムな位置に複数のランダムなオブジェクトを生成する

using UnityEngine; 
using System.Collections; 

public class SpawnItems : MonoBehaviour 
{ 
    public Transform[] SpawnPoints; 
    public GameObject[] Objetos; 

    void Start() 
    { 
     int spawnindex = Random.Range (0, SpawnPoints.Length); 
     int objectindex = Random.Range (0, Objetos.Length); 

     Instantiate (Objetos [objectindex], SpawnPoints [spawnindex].position, SpawnPoints [spawnindex].rotation); 
    } 

} 
+0

コードボタンを使用して、4つのスペースをインデントすることができます。現時点では、コードとしてフォーマットされていません。また、 'UnityEngineを使用しています'の後に続く行はありません。 – AlBlue

答えて

0

私が取り組んでいるゲームでこれを正確に行う機能を作った。

public List<GameObject> spawnPositions; 
public List<GameObject> spawnObjects; 

void Start() 
{ 
    SpawnObjects(); 
} 

void SpawnObjects() 
{ 
    foreach(GameObject spawnPosition in spawnPositions) 
    { 
     int selection = Random.Range(0, spawnObjects.Count); 
     Instantiate(spawnObjects[selection], spawnPosition.transform.position, spawnPosition.transform.rotation); 
    } 
} 

それが動作する方法は、リストにあなたのさまざまな場所に置いてある、とあなたが別のリストに出現するオブジェクトの異なるプレハブのすべてが、その後、ループが異なるのそれぞれでランダムなオブジェクトを生成しますポジション。

置くことを忘れないでください:クラスの上部に

using System.Collections.Generic; 

をリストを使用するために。これには配列を使用することもできますが、私は個人的にリストを好んでいます。

Start()関数はオブジェクトごとに1回だけ呼び出されるため、このコードはシーンがロードされるたびに1回だけ実行されます。

+0

Woooow!できます。本当に素敵 !!!!!!ありがとうございました@乱れた – Angelsm

0

私はあなたがStart()機能でspawnindexを呼び出しているためであると考えています。

これは、あなたのspawnindexが再生モードに達したときにいつも一度だけStart()機能と同じ番号になることを意味します。

これは同じ番号を持つobjectIndexを意味するので、常に同じオブジェクトが生成されます。

これは、すべてのスポーンされたオブジェクトが同じ番号を使用してスポーンすることを意味します。階層を見ると、GameObjectsはおそらくすべて同じ位置にあり、同じオブジェクトにあります。

GameObjectごとに異なる番号を生成する方法を見つける必要があります。 :-)

EDIT:

このコードは、ユニティのウェブサイトからチュートリアルの一つからです。設定された時間率でオブジェクトを生成します。あなたは同じことをすることができますが、非常に少ない数でスポーンタイムレートを持っている、そのようにあなたのGameObjectのすべてが同時に発生したように見えます。

void Start() 
    { 
     // Call the Spawn function after a delay of the spawnTime and then continue to call after the same amount of time. 
     InvokeRepeating ("Spawn", spawnTime, spawnTime); 
    } 


    void Spawn() 
    { 
     // If the player has no health left... 
     if(playerHealth.currentHealth <= 0f) 
     { 
      // ... exit the function. 
      return; 
     } 

     // Find a random index between zero and one less than the number of spawn points. 
     int spawnPointIndex = Random.Range (0, spawnPoints.Length); 

     // Create an instance of the enemy prefab at the randomly selected spawn point's position and rotation. 
     Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); 
    } 
1

あなたは私が右のあなたの質問を入手するには、ループ

Start() 
    { 
     int numberOfObjectsToSpawn = 10; 
     int spawnindex; 
     int objectindex 

     for(int i = 0; i < numberOfObjectsToSpawn; i++){ 

     spawnindex = Random.Range (0, SpawnPoints.Length); 
     objectindex = Random.Range (0, Objetos.Length); 


     Instantiate (Objetos [objectindex], SpawnPoints [spawnindex].position, SpawnPoints [spawnindex].rotation); 

     } 
    } 

希望でそれを行うことができます。

+0

私はそれを試してみますが、オブジェクトの1つだけが再び表示されます:( – Angelsm

+0

UnityEngineを使用して – Kasta

+0

; using system 。コレクション パブリッククラスSpawnItems:MonoBehaviour { \t Transform [] SpawnPoints; \t public GameObject [] Objetos; \tボイド開始() \t { \t \t INT numberOfObjectsToSpawn = 10。 \t \t \t \t int spawnindex = Random.Range(0、SpawnPoints.Length); \t \t int objectindex = Random.Range(0、Objetos.Length); (; iがnumberOfObjectsToSpawnを<; I = 0をint型私は++)のため \t \t \t \t \t \t \t \t \t { \t \tインスタンス化(Objetos [objectindex]、SpawnPoints [spawnindex] .position、SpawnPoints [spawnindex]。回転); \t \t} \t} は} – Angelsm

関連する問題