using System; using System.Collections.Generic; using System.Linq; using UnityEngine; /// /// 使带有多个材质球的物体变透明 /// public class BaseWallControlTwo : MonoBehaviour { /// /// /// [Tooltip("")] public List colliders = new List(); /// /// /// [Tooltip("")] public List MyTransparent = new List(); /// /// /// [Tooltip("")] public bool ChildRenderer; private List meshRenderers; private List materials; public List empty = new List(); /// /// 透明材质 /// [Tooltip("透明材质")] public Material TransparentMat; public List MeshRenderers { get { if (meshRenderers == null) meshRenderers = GetComponentsInChildren().ToList(); return meshRenderers; } } public List Materials { get { if (materials == null) { materials = new List(); MeshRenderers.ForEach(render => { Array.ForEach(render.materials, (_mat) => { if (!materials.Contains(_mat)) { materials.Add(_mat); Material _emp = new Material(_mat); empty.Add(_emp); } }); }); } return materials; } } void Start() { //Debug.Log("版本号 1.1.1"); colliders = GetComponents().ToList(); for (int i = 0; i < Materials.Count; i++) { if (Materials[i].renderQueue == 3000) { MyTransparent.Add(Materials[i].name); } } //Debug.Log("版本号 1.1.1"); } /// /// 透明显示 /// [ContextMenu("透明显示")] public void OpaquesTwo() { MeshRenderers.ForEach(renderer => { Array.ForEach(renderer.materials, mat => { mat.CopyPropertiesFromMaterial(TransparentMat); }); }); //禁用碰撞 colliders.ForEach(x => x.enabled = false); } /// /// 取消透明显示 /// [ContextMenu("取消透明显示")] public void OpaquesTwoFalse() { MeshRenderers.ForEach(renderer => { Array.ForEach(renderer.materials, mat => { mat.CopyPropertiesFromMaterial(empty.Find(x => x.name.Equals(mat.name))); }); }); //启用碰撞 colliders.ForEach(x => x.enabled = true); } }