private bool m_RecoverState = true; // 是否已经恢复成原始的材质 /// <summary> /// 初始化材质信息 /// </summary> public void InitMat() { m_InitMat.Clear(); m_InitMatExtra.Clear(); if (mOwner == null || mOwner.IsDestroy) { return; } var game_obeject = mOwner.gameObject; if (game_obeject == null) { return; } Renderer[] renderes = mOwner.gameObject.GetComponentsInChildren <Renderer>(); foreach (Renderer r in renderes) { if (r.sharedMaterial == null) { continue; } string tag_name = r.gameObject.tag;// 只有标记tag的节点才替换材质 if (tag_name.ToLower() != "matreplace") { continue; } ExtraMatInf mat_info = new ExtraMatInf(); if (r.sharedMaterial.HasProperty(MainColorName)) { mat_info.OriColor = r.sharedMaterial.color; } mat_info.Instance = false; m_InitMatExtra.Add(r, mat_info); m_InitMat.Add(r, r.sharedMaterial); } }
/// <summary> /// 恢复原始的材质 /// </summary> public void Recover() { if (m_RecoverState) { return; } foreach (KeyValuePair <Renderer, Material> kvp in m_InitMat) { if (kvp.Key == null || kvp.Value == null) { continue; } var mat_info = m_InitMatExtra[kvp.Key]; if (mat_info.Instance) { mat_info.Instance = false; // 要先销毁instance的材质 var instance_mat = kvp.Key.material; kvp.Key.sharedMaterial = kvp.Value; GameObject.Destroy(instance_mat); } else { kvp.Key.sharedMaterial = kvp.Value; } ExtraMatInf emi = m_InitMatExtra[kvp.Key]; if (kvp.Value.HasProperty(MainColorName)) { kvp.Key.sharedMaterial.SetColor(MainColorName, emi.OriColor); } } m_RecoverState = true; }