300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Unity 模型整体更改材质

Unity 模型整体更改材质

时间:2023-09-30 07:21:44

相关推荐

Unity 模型整体更改材质

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(); });}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。