using System.Collections; using System.Collections.Generic; using UnityEngine; public class FixShader : MonoBehaviour { private List thisMaterial = new List(); private List shaders = new List(); private void Awake() { thisMaterial.Clear(); shaders.Clear(); MeshRenderer[] meshRenderer = GetComponentsInChildren(true); int length = meshRenderer.Length; for (int i = 0; i < length; i++) { int count = meshRenderer[i].materials.Length; for (int j = 0; j < count; j++) { Material _mater = meshRenderer[i].materials[j]; thisMaterial.Add(_mater); shaders.Add(_mater.shader.name); } } SkinnedMeshRenderer[] meshSkinRenderer = GetComponentsInChildren(true); length = meshSkinRenderer.Length; for (int i = 0; i < length; i++) { int count = meshSkinRenderer[i].materials.Length; for (int j = 0; j < count; j++) { Material _mater = meshSkinRenderer[i].materials[j]; thisMaterial.Add(_mater); shaders.Add(_mater.shader.name); } } ParticleSystem[] particleSys = GetComponentsInChildren(true); length = particleSys.Length; for (int i = 0; i < length; i++) { ParticleSystemRenderer render = particleSys[i].GetComponent(); int count = render.materials.Length; for (int j = 0; j < count; j++) { Material _mater = render.materials[j]; thisMaterial.Add(_mater); shaders.Add(_mater.shader.name); } } TrailRenderer[] trailSys = GetComponentsInChildren(true); length = trailSys.Length; for (int i = 0; i < length; i++) { int count = trailSys[i].materials.Length; for (int j = 0; j < count; j++) { Material _mater = trailSys[i].materials[j]; thisMaterial.Add(_mater); shaders.Add(_mater.shader.name); } } } void Start() { for (int i = 0; i < thisMaterial.Count; i++) { thisMaterial[i].shader = Shader.Find(shaders[i]); } } }