public int[] initCount_Particle; //给定每种特效初始数量 void PlayParticle(Vector3 pos, Quaternion direction, ExploseType type) { return; int index = (int)type; GameObject curParticle; if (EXP_Particle[index][useIndex_Particle[index]]) { curParticle = EXP_Particle[index][useIndex_Particle[index]]; if (curParticle.activeInHierarchy) //当前特效正在被使用 { curParticle = InitNewParticles(type); //找到未被利用的,或者实例化一个新的 } } else { curParticle = EXP_Particle[index][useIndex_Particle[index]] = Instantiate(particles[index]) as GameObject; } curParticle.transform.position = pos; curParticle.transform.rotation = direction; curParticle.SetActive(true); useIndex_Particle[index]++; if (useIndex_Particle[index] == initCount_Particle[index]) { useIndex_Particle[index] = 0; } }
GameObject InitNewParticles(ExploseType type) { int index = (int)type; GameObject newParticle = null; for (int i = 0; i < initCount_Particle[index]; i++) { if (EXP_Particle[index][i]) { if (!EXP_Particle[index][i].activeInHierarchy) { newParticle = EXP_Particle[index][i]; break; } } else { newParticle = EXP_Particle[index][i] = Instantiate(particles[index]) as GameObject; break; } } if (newParticle == null) { GameObject[] newParticles = new GameObject[initCount_Particle[index] + 8]; Array.Copy(EXP_Particle[index], newParticles, initCount_Particle[index]); EXP_Particle[index] = newParticles; //赋值给缓存 useIndex_Particle[index] = initCount_Particle[index]; initCount_Particle[index] += 8; } newParticle = EXP_Particle[index][useIndex_Particle[index]] = Instantiate(particles[index]) as GameObject; return(newParticle); }
void _Play(ExploseType type) { }