private void Start() { // Create a GameObject to create a prototype from prototypeGameObject = GameObject.CreatePrimitive(PrimitiveType.Quad); // Set material of the GameObject SetMaterial(); // Create a list to keep track of instances instanceList = new List <GameObject>(); // Add the original to the instanceList instanceList.Add(prototypeGameObject); // Your instantiation logic. Uses the prototype GameObject to identify the newly generated prototype. // This example just instantiates objects at random positions inside a sphere with radius of 20; // Replace this with how you want to generate your instances. for (int i = 0; i < 1000; i++) { instanceList.Add(Instantiate(prototypeGameObject, UnityEngine.Random.insideUnitSphere * 20, Quaternion.identity)); } // Define the prototype prototype = GPUInstancerAPI.DefineGameObjectAsPrefabPrototypeAtRuntime(prefabManager, prototypeGameObject); // Make changes in the prototype settings prototype.enableRuntimeModifications = true; prototype.autoUpdateTransformData = true; // Add the prototype instances GPUInstancerAPI.AddInstancesToPrefabPrototypeAtRuntime(prefabManager, prototype, instanceList); // Start Coroutine to change instances over time StartCoroutine(AddRemoveAtRuntime()); }
IEnumerator AddRemoveAtRuntime() { while (true) { // Loop through primitives foreach (PrimitiveType primitiveType in Enum.GetValues(typeof(PrimitiveType))) { yield return(new WaitForSeconds(3)); // Remove runtime generated prototype definition GPUInstancerAPI.RemovePrototypeAtRuntime(prefabManager, prototype); // Clear the instances ClearInstances(); yield return(new WaitForSeconds(1)); // Create a GameObject to create a prototype from prototypeGameObject = GameObject.CreatePrimitive(primitiveType); // Set material of the GameObject SetMaterial(); // Add the original to the instanceList instanceList.Add(prototypeGameObject); // Define the prototype prototype = GPUInstancerAPI.DefineGameObjectAsPrefabPrototypeAtRuntime(prefabManager, prototypeGameObject); // Create 1000 new instances for (int i = 0; i < 1000; i++) { instanceList.Add(Instantiate(prototypeGameObject, UnityEngine.Random.insideUnitSphere * 20, Quaternion.identity)); } // Add instances to manager GPUInstancerAPI.AddInstancesToPrefabPrototypeAtRuntime(prefabManager, prototype, instanceList); yield return(new WaitForSeconds(1)); } } }