2017-12-20 13 views
1

4つのプラットフォームを4つの場所でインスタンス化しています。私が望むのは、毎回プラットフォームをシャッフルすることです。これまでの私のコード:4つのプレハブを4つの場所でインスタント化、シャッフル、Unity Engine C#

using UnityEngine; 

public class PlatformCreator : MonoBehaviour { 

public GameObject[] platforms; 
public Transform[] points; 

private void Start() 
{ 

    for (int i = 0; i < points.Length; i++) 
    { 
     Instantiate(platforms[i], points[i].position, Quaternion.identity); 
    } 
} 

}

例えばプラットフォームは現在、常に同じ順序で出現 -

、ピンク、黄色、青、紫、私は彼らがすべての異なる順序で生成されたことにしたいです黄色、青、紫、ピンクのような時間があります。私はrandom.rangeでintインデックスを作成しようとしましたが、何かを混乱させています

+0

あなたはint型のx = Random.Range(0、points.Length)を使用することができますが、あなたのループして、ポイントの内部[X] .positionを? – ApolloSoftware

答えて

4

値を "シャッフル"するのに役立つ配列の代わりにリストにポイントを追加することができます。 SOポストThisからシャッフル機能を取ると、あなたはこのような何か行うことができます:

public class PlatformCreator : MonoBehaviour { 

public GameObject[] platforms; 
public List<Transform> points; 

private Random rng; 

public void Shuffle<T>(this IList<T> list) 
{ 
    int n = list.Count; 
    while (n > 1) { 
    n--; 
    int k = rng.Next(n + 1); 
    T value = list[k]; 
    list[k] = list[n]; 
    list[n] = value; 
    } 
} 

private void Start() 
{ 
    rng = new Random(); 
    points.Shuffle(); 
    for (int i = 0; i < points.Count; i++) 
    { 
     Instantiate(platforms[i], points[i].position, Quaternion.identity); 
    } 
} 
} 
+0

残念ながら、points.Lengthプロパティはリストで使用できないため、うまくいきません。おそらく私は.Count(points.Count)で試してみることができますか? int k = rng.Next()と同じ問題が発生し、Next()を使用することができず、エラーが発生します。 –

+0

はい、申し訳ありません。リストは、長さではなく、カウントを使用します。更新された答え。 –

+0

エラーの内容を教えてください。私はあなたがそれを投稿しない限り、知る方法がない。 –

関連する問題