public void SpawnParticleSystem(int effect, RaycastHit hit, Vector3 rayDir) { ParticleSystem particleSystem = Instantiate(particleSystems[effect]); particleSystem.gameObject.SetActive(true); particleSystem.transform.position = hit.point + hit.normal * 0.1f; Color bulletHoleImpactColorDelta = new Color(50f / 255f, 50f / 255f, 50f / 255f, 0); //ParticleSystem.SubEmittersModule subEmittersModule = particleSystem.subEmitters; //ParticleSystemSubEmitterProperties subEmProps = new ParticleSystemSubEmitterProperties(); //subEmittersModule.SetSubEmitterProperties() //if (particleSystem.transform.GetChild(0) != null) //{ // //ParticleSystem bloodCol = blood.transform.GetChild(0).gameObject.GetComponent<ParticleSystem>(); // //bloodCol.randomSeed = bloodCol.randomSeed; // //ParticleSystem bloodPS = Instantiate(blood); // //bloodPS.transform.position = hit.point + hit.normal * 0.1f; // //bloodPS.Play(); // //return; // //ParticleSystem.Particle[] particles = new ParticleSystem.Particle[particleSystem.particleCount]; // //particleSystem.GetParticles(particles); // //for (int i = 0; i < particles.Length; i++) // //{ // // ParticleSystem.Particle[] subParticles = new ParticleSystem.Particle[]; // //} // ParticleSystem bloodCollider = particleSystem.transform.GetChild(0).gameObject.GetComponent<ParticleSystem>(); // Debug.Log(particleSystem.randomSeed); // //bloodCollider.randomSeed = particleSystem.randomSeed; // Debug.Log("Col: " + bloodCollider.randomSeed); // //bloodCollider.startSpeed = particleSystem.startSpeed; // //Debug.Log(particleSystem.startSpeed); // //Debug.Log("col: " + bloodCollider.startSpeed); // //bloodCollider.startLifetime = particleSystem.startLifetime; // //Debug.Log(particleSystem.startLifetime); // //Debug.Log("col: " + bloodCollider.startLifetime); //} //Debug.Log(particleSystem.name); if (particleSystem.name.Contains("BulletImpactPS")) { Color32 surfaceColor = GetPixelColor(hit); surfaceColor.a = 255; Debug.Log("SF color: " + surfaceColor); if (surfaceColor.r > 0 || surfaceColor.g > 0 || surfaceColor.b > 0 && surfaceColor.a > 0) { ParticleSystem.MainModule main = particleSystem.main; if (surfaceColor.ColorEq(bulletholeColor1) || surfaceColor.ColorEq(bulletholeColor2) || surfaceColor.ColorEq(bulletholeColor3) || surfaceColor.ColorEq(bulletholeColor4) || surfaceColor.ColorEq(bulletholeColor5)) { main.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor + bulletHoleImpactColorDelta); } else { main.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor - new Color(30f / 255f, 30f / 255f, 30f / 255f, 0)); } //particleSystem.startColor = surfaceColor; //ParticleSystem.TrailModule trails = particleSystem.trails; //ParticleSystem.MinMaxGradient trailColorModule = particleSystem.trails.colorOverLifetime; //trailColorModule.color = surfaceColor; //trails.colorOverLifetime = trailColorModule; //UnityEngine.Debug.Log("particle color: " + particleSystem.startColor); //UnityEngine.Debug.Log("surface color: " + surfaceColor); //UnityEngine.Debug.Log("trail color: " + particleSystem.trails.colorOverLifetime.color); } if (surfaceColor.r < 60 && surfaceColor.g < 60 && surfaceColor.b < 60 && surfaceColor.a > 0 && !surfaceColor.ColorEq(bulletholeColor1) && !surfaceColor.ColorEq(bulletholeColor2) && !surfaceColor.ColorEq(bulletholeColor3) && !surfaceColor.ColorEq(bulletholeColor4) && !surfaceColor.ColorEq(bulletholeColor5)) { ParticleSystem impactSplashSparkles = Instantiate(particleSystems.Find(x => x.name.Contains("BulletImpactSplashSparklesPS"))); impactSplashSparkles.gameObject.SetActive(true); impactSplashSparkles.transform.position = hit.point + hit.normal * 0.01f; impactSplashSparkles.transform.forward = hit.normal; //ParticleSystem.MainModule splashMain = impactSplashSparkles.main; //splashMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor - new Color(30f / 255f, 30f / 255f, 30f / 255f, 0)); //impactSplash.startColor = surfaceColor; impactSplashSparkles.Play(); ParticleSystem impactReflectSparkles = Instantiate(particleSystems.Find(x => x.name.Contains("BulletImpactReflectSparklesPS"))); impactReflectSparkles.gameObject.SetActive(true); impactReflectSparkles.transform.position = hit.point + hit.normal * 0.01f; Vector3 reflectionVector = Vector3.Reflect(rayDir, hit.normal); //ParticleSystem.MainModule reflectMain = impactReflectSparkels.main; //reflectMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor - new Color(30f / 255f, 30f / 255f, 30f / 255f, 0)); impactReflectSparkles.transform.forward = reflectionVector;//hit.normal; impactReflectSparkles.Play(); } else { ParticleSystem impactSplash = Instantiate(particleSystems.Find(x => x.name.Contains("BulletImpactSplashPS"))); impactSplash.gameObject.SetActive(true); impactSplash.transform.position = hit.point + hit.normal * 0.01f; impactSplash.transform.forward = hit.normal; ParticleSystem.MainModule splashMain = impactSplash.main; if (surfaceColor.ColorEq(bulletholeColor1) || surfaceColor.ColorEq(bulletholeColor2) || surfaceColor.ColorEq(bulletholeColor3) || surfaceColor.ColorEq(bulletholeColor4) || surfaceColor.ColorEq(bulletholeColor5)) { splashMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor + bulletHoleImpactColorDelta); } else { splashMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor - new Color(30f / 255f, 30f / 255f, 30f / 255f, 0)); //impactSplash.startColor = surfaceColor; } impactSplash.Play(); ParticleSystem impactReflect = Instantiate(particleSystems.Find(x => x.name.Contains("BulletImpactReflectPS"))); impactReflect.gameObject.SetActive(true); impactReflect.transform.position = hit.point + hit.normal * 0.01f; Vector3 reflectionVector = Vector3.Reflect(rayDir, hit.normal); ParticleSystem.MainModule reflectMain = impactReflect.main; impactReflect.transform.forward = reflectionVector;//hit.normal; if (surfaceColor.ColorEq(bulletholeColor1) || surfaceColor.ColorEq(bulletholeColor2) || surfaceColor.ColorEq(bulletholeColor3) || surfaceColor.ColorEq(bulletholeColor4) || surfaceColor.ColorEq(bulletholeColor5)) { reflectMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor + bulletHoleImpactColorDelta); } else { reflectMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor - new Color(30f / 255f, 30f / 255f, 30f / 255f, 0)); } impactReflect.Play(); } //ParticleSystem impactReflect = Instantiate(particleSystems.Find(x => x.name.Contains("BulletImpactReflectPS"))); //ParticleSystem impactReflectSparkels = Instantiate(particleSystems.Find(x => x.name.Contains("BulletImpactReflectSparklesPS"))); ParticleSystem impactResidue = Instantiate(particleSystems.Find(x => x.name.Contains("BulletImpactResiduePS"))); ParticleSystem dustEffect = Instantiate(particleSystems.Find(x => x.name.Contains("DustEffectSmallPS"))); ParticleSystem.MainModule residueMain = impactResidue.main; if (surfaceColor.ColorEq(bulletholeColor1) || surfaceColor.ColorEq(bulletholeColor2) || surfaceColor.ColorEq(bulletholeColor3) || surfaceColor.ColorEq(bulletholeColor4) || surfaceColor.ColorEq(bulletholeColor5)) { residueMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor + bulletHoleImpactColorDelta); } else { residueMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor - new Color(30f / 255f, 30f / 255f, 30f / 255f, 0)); } //residueMain.startColor = new ParticleSystem.MinMaxGradient(surfaceColor, surfaceColor - new Color(30f / 255f, 30f / 255f, 30f / 255f, 0)); //impactResidue.startColor = surfaceColor; impactResidue.gameObject.SetActive(true); impactResidue.transform.position = hit.point + hit.normal * 0.01f; impactResidue.transform.forward = hit.normal; impactResidue.Play(); dustEffect.gameObject.SetActive(true); dustEffect.transform.position = hit.point + hit.normal * 0.13f;// Bring outwards from the surface to avoid clipping dustEffect.transform.position += new Vector3(0f, 0.2f, 0f); dustEffect.transform.forward = hit.normal; dustEffect.Play(); decalHandler.PaintBulletHole(hit); } if (particleSystem.name.Contains("Strike")) { particleSystem.transform.forward = rayDir; } else { particleSystem.transform.forward = hit.normal; } particleSystem.Play(); if (slow) { particleSystem.playbackSpeed = playbackSpeed; } else { particleSystem.playbackSpeed = 1f; } //playingSystems.Add(particleSystem.gameObject); }