using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; /// /// 透明脚本 /// public class TransparentGlow : MonoBehaviour { public bool isTransparentGlow = false; private List meshRenderers; /// /// 自身的 /// private List materials; /// /// 复制出来的 /// public List empty = new List(); public Shader TransparentGlow_Shader; 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; } } // Start is called before the first frame update void Start() { for (int i = 0; i < Materials.Count; i++) break; if (TransparentGlow_Shader == null) TransparentGlow_Shader = Resources.Load("TransparentGlow"); } // Update is called once per frame void Update() { } /// /// 透明 /// [ContextMenu("透明")] public void F1(/*float a = 0.5f*/) { for (int i = 0; i < Materials.Count; i++) { Materials[i].shader = TransparentGlow_Shader; Materials[i].renderQueue = 3000; //Materials[i].SetFloat("_Transparecy", a); } } /// /// 恢复原材质 /// [ContextMenu("恢复原材质")] public void F2() { for (int i = 0; i < Materials.Count; i++) { Materials[i].shader = empty[i].shader; } } [ContextMenu("添加点击组件")] public void F3() { TransparentGlow[] components = FindObjectsOfType(false); foreach (var item in components) { ClickEvent clickEvent = item.GetComponent(); BoxCollider boxCollider = item.GetComponent(); if (item.gameObject.activeSelf) { if (!clickEvent) item.gameObject.AddComponent(); if (!boxCollider) { var a = item.gameObject.AddComponent(); a.isTrigger = true; } } } } }