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