using UnityEngine; public class ModelAlphaTest : MonoBehaviour { public GameObject model; public bool isChange; float alpha = 0; private Renderer[] allMaterial; void Awake() { allMaterial = ChangeModelMaterial(); } /// <summary> /// 改变模型透明度 /// </summary> /// <param name="alpha"></param> /// <returns></returns> public Renderer[] ChangeModelMaterial() { if (model == null) return null; Renderer[] allMaterial = model.GetComponentsInChildren<Renderer>(); //修改材质的RenderingMode // foreach (var renderer1 in allMaterial) // { // foreach (var renderer1Material in renderer1.materials) // { // if (renderer1Material.HasProperty("_Mode")) // { // renderer1Material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); // renderer1Material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); // renderer1Material.SetInt("_ZWrite", 0); // renderer1Material.DisableKeyword("_ALPHATEST_ON"); // renderer1Material.DisableKeyword("_ALPHABLEND_ON"); // renderer1Material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); // renderer1Material.SetFloat("_Mode", 2); // } // } // } return allMaterial; } void Update() { if (isChange) { alpha += Time.deltaTime; alpha = alpha > 1f ? 1f : alpha; foreach (var render in allMaterial) { if (render.material.HasProperty("_Color")) render.material.color = render.material.color.SetAlpha(alpha); if (!render.material.HasProperty("_TintColor")) continue; Color cor = render.material.GetColor("_TintColor"); cor.a = alpha; render.material.SetColor("_TintColor", cor); } } else { alpha -= Time.deltaTime; alpha = alpha < 0 ? 0 : alpha; foreach (var render in allMaterial) { if (render.material.HasProperty("_Color")) render.material.color = render.material.color.SetAlpha(alpha); if (!render.material.HasProperty("_TintColor")) continue; Color cor = render.material.GetColor("_TintColor"); cor.a = alpha; render.material.SetColor("_TintColor", cor); } } } }
alpha=1
alpha = 0.2
alpha=0
本人也只是用过一次 如有错漏请指正