之前在项目中写个类似的效果,但当时是用外包一个正方体,更改其纹理的alpha。但这种方法应用到不规则物体上效果就糟糕了。
这一阵看了点shader知识,下面就用shader实现一下吧。
1.新建一个shader,其内容如下:
Shader "Custom/changeAlpha" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_MyFloat ("My Alpha", range(0,1)) = 1.0
}
SubShader {
Tags { "RenderType"="Transparent" "Queue" = "Transparent" }
LOD 200
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
float _MyFloat;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
half4 tex = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = tex.rgb;
o.Alpha = _MyFloat;
}
ENDCG
}
FallBack "Diffuse"
}
ok,内容就不解释了(需要解释的一定是还没接触shader的,建议从头开始学)。
2.新建一个c#脚本,内容如下:
using UnityEngine;
using System.Collections;
public class ChangeAlpha : MonoBehaviour {
Material mat;
float alpha = 0f;
bool isAdd = true;
// Use this for initialization
void Start () {
mat = renderer.material;
}
// Update is called once per frame
void Update () {
if(alpha>1)
{
isAdd = false;
}
if(alpha<0)
{
isAdd = true;
}
if(isAdd)
{
alpha += 0.01f;
}
else
{
alpha -= 0.01f;
}
mat.SetFloat ("_MyFloat", alpha);
}
}
3.新建一个物体(cube),将上面的shader和c#脚本应用到此物体。
OK