在 4 个位置实例化 4 个预制件,打乱顺序,Unity Engine C#

Instantiate 4 prefabs at 4 locations, shuffled, Unity Engine C#

我拥有的是在 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 索引,但我弄乱了一些东西

您可以将点添加到列表而不是数组,这将帮助您 "shuffle" 值。从 This SO post 中获取随机播放功能,你可以这样做:

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