using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityGameFramework.Runtime; using UnityEngine.AI; /// /// 场景 传送点 /// public class SceneEventNearAlpha : MonoBehaviour { Camera ca; /// /// 通用默认 /// Material mat; /// /// 本身新的材质 /// Material selfMat = null; MeshRenderer rend; bool isNear = false; float alpalDis = 21; public void Start() { ca = Camera.main; rend = this.GetComponent(); mat = rend.material; } void Update() { return; float dis = Vector3.Distance(this.transform.position, ca.transform.position); if (dis < alpalDis) { if(!isNear) { if (!selfMat) { selfMat = new Material(mat); MaterialRenderingMode.SetMaterialRenderingMode(selfMat, MaterialRenderingMode.RenderingMode.Fade); } rend.material = selfMat; isNear = true; } SetCmptAlpha(dis / alpalDis); } else { if (isNear) { rend.material = mat; isNear = false; } } } void SetCmptAlpha(float a) { selfMat.SetColor("_Color", new Color(1, 1, 1, a));//修改 Albedo 属性 } } public class MaterialRenderingMode { public enum RenderingMode { Opaque, Cutout, Fade, Transparent } //设置材质的渲染模式 static public void SetMaterialRenderingMode(Material material, RenderingMode renderingMode) { switch (renderingMode) { case RenderingMode.Opaque: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt("_ZWrite", 1); material.DisableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = -1; break; case RenderingMode.Cutout: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); material.SetInt("_ZWrite", 1); material.EnableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 2450; break; case RenderingMode.Fade: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.SetInt("_ZWrite", 0); material.DisableKeyword("_ALPHATEST_ON"); material.EnableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; break; case RenderingMode.Transparent: material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.SetInt("_ZWrite", 0); material.DisableKeyword("_ALPHATEST_ON"); material.DisableKeyword("_ALPHABLEND_ON"); material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; break; } } }