void Start() { int size = 500; Dictionary <string, double> myDictionary = new Dictionary <string, double> { { "Sphere", 0.5 }, { "Cube", 0.1 }, { "Capsule", 0.2 }, { "Cylinder", 0.2 } }; WeightedRandom weighted = new WeightedRandom(); List <string> values = weighted.RandomList(size, myDictionary); gameObjects = new List <GameObject>(size); for (int i = 0; i < values.Count; i++) { GameObject go; if (values[i].Equals("Sphere")) { go = GameObject.CreatePrimitive(PrimitiveType.Sphere); go.GetComponent <Renderer>().material.color = Color.red; } else if (values[i].Equals("Cube")) { go = GameObject.CreatePrimitive(PrimitiveType.Cube); go.GetComponent <Renderer>().material.color = Color.blue; } else if (values[i].Equals("Capsule")) { go = GameObject.CreatePrimitive(PrimitiveType.Capsule); go.GetComponent <Renderer>().material.color = Color.cyan; } else { go = GameObject.CreatePrimitive(PrimitiveType.Cylinder); go.GetComponent <Renderer>().material.color = Color.green; } go.AddComponent <Rigidbody>(); go.SetActive(false); Instantiate(go, Vector3.zero, Quaternion.identity); gameObjects.Add(go); } StartCoroutine(InvokeMethod(SpawnGameobject, gameObjects.Count)); }