在4个位置实例化4个预制件,洗牌,Unity Engine C#

时间:2017-12-20 18:16:16

标签: c# unity3d instantiation

我所拥有的是4个平台,我在4个位置实例化。我想要的是每次都要对平台进行洗牌。到目前为止我的代码:

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索引,但是我搞砸了什么

1 个答案:

答案 0 :(得分:4)

您可以将点数添加到列表而不是数组,这将有助于您“洗牌”#34;价值。从This SO帖子中获取随机播放功能,您可以执行以下操作:

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);
    }
 }
}