using System;using System.Collections.Generic;using UnityEngine;public class ModelTransparent : MonoBehaviour{/// <summary>/// 用于保存模型原来得Material/// </summary>[HideInInspector] public List<MaterialList> Material_List = new List<MaterialList>();/// <summary>/// 透明材质/// </summary>public Material MaterialTransparent;private void Awake(){RecordOriginalMaterials();}/// <summary>/// 记录模型原本得材质/// </summary>void RecordOriginalMaterials(){MeshRenderer[] rendererArray = GetComponentsInChildren<MeshRenderer>();if (rendererArray.Length != 0){Material_List.Clear();for (int i = 0; i < rendererArray.Length; i++){int temp = i;Material[] materialArray = rendererArray[temp].materials;MaterialList materialList = new MaterialList();if (materialArray.Length != 0){for (int j = 0; j < materialArray.Length; j++){int tempNumber = j;materialList.materialData.Add(materialArray[tempNumber]);}Material_List.Add(materialList);}}}}/// <summary>/// 模型透明/// </summary>public void ChangeModelForTransparent(){MeshRenderer[] rendererArray = GetComponentsInChildren<MeshRenderer>();if (rendererArray.Length != 0){for (int i = 0; i < rendererArray.Length; i++){int temp = i;Material[] ma = rendererArray[temp].materials;if (ma.Length != 0){for (int j = 0; j < ma.Length; j++){ma[j] = MaterialTransparent;}}rendererArray[temp].materials = ma;}}}/// <summary>/// 模型恢复原来的材质/// </summary>public void ChangeModelMaterialForOriginal(){MeshRenderer[] rendererArray = GetComponentsInChildren<MeshRenderer>();if (rendererArray.Length != 0){for (int i = 0; i < rendererArray.Length; i++){int temp = i;if (i < Material_List.Count){rendererArray[temp].materials = Material_List[temp].materialData.ToArray();}}}}}[Serializable]public class MaterialList{public List<Material> materialData = new List<Material>();public MaterialList(){}public MaterialList(List<Material> materials){materialData = materials;}}
Test:
using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class Test : MonoBehaviour{private ModelTransparent _modelTransparent;public GameObject TestGameObject;public List<Button> btns;void Start(){_modelTransparent = TestGameObject.GetComponent<ModelTransparent>();btns[0].onClick.AddListener(delegate {_modelTransparent.ChangeModelForTransparent(); });btns[1].onClick.AddListener(delegate {_modelTransparent.ChangeModelMaterialForOriginal(); });}}