using System.Collections; using System.Collections.Generic; using UnityEngine; public class replaceMaterialSystem : MonoBehaviour { [Header ("Main Settings")] [Space] public bool replaceMaterialsEnabled = true; [Space] [Header ("Main Settings")] [Space] public GameObject objectToUse; public Material materialToReplace; public List renderInfoList = new List (); Renderer currentRenderer; renderInfo currentRenderInfo; public void setMaterialState (bool state) { if (!replaceMaterialsEnabled) { return; } checkObjectMaterials (); int renderInfoListCount = renderInfoList.Count; for (int i = 0; i < renderInfoListCount; i++) { currentRenderInfo = renderInfoList [i]; currentRenderer = currentRenderInfo.mainRenderer; int materialsLength = currentRenderer.materials.Length; Material[] allMats = currentRenderer.materials; if (state) { for (int m = 0; m < materialsLength; m++) { allMats [m] = materialToReplace; } } else { int materialListCount = currentRenderInfo.materialList.Count; for (int m = 0; m < materialListCount; m++) { allMats [m] = currentRenderInfo.materialList [m]; } } currentRenderer.materials = allMats; } } public void checkObjectMaterials () { if (renderInfoList.Count == 0) { Component[] components = objectToUse.GetComponentsInChildren (typeof(Renderer)); foreach (Renderer child in components) { if (!child.GetComponent ()) { renderInfo newRenderInfo = new renderInfo (); newRenderInfo.mainRenderer = child; int materialsLength = child.materials.Length; for (int i = 0; i < materialsLength; i++) { newRenderInfo.materialList.Add (child.materials [i]); } renderInfoList.Add (newRenderInfo); } } } } [System.Serializable] public class renderInfo { public Renderer mainRenderer; public List materialList = new List (); } }