代码之家  ›  专栏  ›  技术社区  ›  Lee Jaedong

在4个位置实例化4个预制,无序,统一引擎C#

  •  1
  • Lee Jaedong  · 技术社区  · 7 年前

    我在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创建一个int索引。范围,但我搞砸了

    1 回复  |  直到 7 年前
        1
  •  4
  •   Brandon Miller    7 年前

    您可以将点添加到列表而不是数组中,这将帮助您“洗牌”值。从 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);
        }
     }
    }