void Initialize() { if (!Initialized) { // Grab a list of Projectile Types founds in assets folder "ProjectileTypes" GameObject[] projectileTypes = Resources.LoadAll <GameObject>("ProjectileTypes"); ProjectileTypes = new List <ProjectileType>(); IndirectRenderers = new Dictionary <int, IndirectRenderer>(); ProjectileTypeCounters = new Dictionary <int, ProjectileTypeCounters>(); // Process projectile types for (int n = 0; n < projectileTypes.Length; n++) { ProjectileType type = projectileTypes[n].GetComponent <ProjectileType>(); type.SetIndex(n); ProjectileTypes.Add(type); // If material is set to be a static color ensure we do not send color data to shader float isStaticFloat = type.Material.GetFloat("_StaticColor"); bool isStatic = false; if (isStaticFloat == 1) { isStatic = true; } IndirectRenderers.Add(n, new IndirectRenderer(type.MaxProjectileCount, type.Material, type.Mesh, isStatic)); ProjectileTypeCounters.Add(n, new ProjectileTypeCounters()); } EmittersArray = new ProjectileEmitterBase[MaxEmitters]; // Get a list of all emitters in the scene RegisterEmitters(); Initialized = true; } }