絮语
8月底的这几天,福州的天气真是异常的好,不冷不热,居然有秋天的感觉。真是对不起这全国第一热的省会城市。
用Unity做新项目已经有一段时间了,核心的Demo已经做的差不多了。突然换游戏引擎还是风险很大,不管如何,选择了就要努力做好。我这赶鸭子上架的半吊子主程,依仗Unity还算成熟,坑虽多,一个个填过去就好了。
问题
策划大神那边要求战斗中,进场退场人物需要透明过度。初想也不复杂,无非是修改材质里Alpha通道值就可以了,先写个测试代码试试。
using UnityEngine;
using System.Collections;
public class DemoManager : MonoBehaviour {
[Range(0,1)]
public float AlphaValue = 1.0f;
void Update () {
//获取材质颜色
Color color = gameObject.GetComponentInChildren<Renderer> ().material.color;
//修改Alpha通道
color.a = AlphaValue;
//赋值
gameObject.GetComponentInChildren<Renderer> ().material.color = color;
}
}
调节面板后发现无效果。。。真是尴尬了。断电调试后发现获取的color值为(0,0,0,0),这时候才想起来当前模型使用的是Unlit/Transparent Cutout的shader。看到Shader就有点头大了,刚使用Unity也没多久,着色器这东西也没接触过,感觉有点遥远。想试试自带的一些shader发现效果都不对(不了解瞎试果然是不行的),没办法,看点资料吧。
解决思路
shader的资料还真是不多,Google后也没有找到可以直接使用的资料。只好找来教程先看看有没有头绪。发现国内的浅墨有专门针对Unity的教程,写的非常仔细,强烈推荐大家一条条看下来
<p><a href="http://blog.csdn.net/column/details/unity3d-shader.html" title="Title">Unity Shader 编程</a> </p>
根据里面的思路写了个简单的Shader,几行就搞定了,知识改变命运233
Shader "Custom/UnitFade"
{
//-------------------------------【属性】------------------------------------
Properties
{
_MainTex ("基础纹理(RGBA)", 2D) = "white" {}
_Color("颜色(RGBA) ", Color) = (1,1,1,1)
}
//--------------------------------【子着色器】--------------------------------
SubShader
{
Pass
{
//关闭光照
Lighting Off
//裁剪背面
Cull back
//目标Alpha通道混合
Blend SrcAlpha OneMinusSrcAlpha
//标记(队列:透明)
Tags {Queue=Transparent}
//纹理与颜色混合
SetTexture [_MainTex]
{
ConstantColor [_Color]
Combine Texture * constant
}
}
}
}
直接将模型贴图使用shader指向我们自定义的Shader就可以了(我这里的模型比较简单,只有一张贴图)
效果
最终效果图