美文网首页用Unity做游戏Unity3D游戏开发Unity
无光照可调节透明通道Shader(unity3d)

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

作者: 玄猫大人 | 来源:发表于2016-08-30 21:29 被阅读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就可以了(我这里的模型比较简单,只有一张贴图)

    效果

    最终效果图

    透明小猪

    相关文章

      网友评论

        本文标题:无光照可调节透明通道Shader(unity3d)

        本文链接:https://www.haomeiwen.com/subject/fwcqettx.html