用Unity做游戏Unity3D游戏开发Unity

无光照可调节透明通道Shader(unity3d)

2016-08-30  本文已影响951人  玄猫大人

絮语

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就可以了(我这里的模型比较简单,只有一张贴图)

效果

最终效果图

透明小猪
上一篇 下一篇

猜你喜欢

热点阅读