码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D Shader 按百分比现实模型

时间:2017-09-27 00:39:29      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:sha   return   2-2   isa   set   float   size   xtu   ati   

技术分享

 

Shader

Shader "Unlit/Disappear"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color("Flow Color",Color) = (1,1,1,1)
        _Percent("Percent",Range(0,1)) = 0.5
        _Range("Range",Float) = 1
        _Offset("Offset",Float) = 0.5
    }

    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog
            
            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;

            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
                float height:COLOR;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float4 _Color;
            float _Range;
            float _Offset;
            float _Percent;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                o.height = (v.vertex.y-_Offset)/_Range; 
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                if(i.height>_Percent)
                {
                    discard;
                }
                return col;
            }
            ENDCG
        }
    }
}

 

代码

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(MeshRenderer))]
public class Disappear : MonoBehaviour 
{
    private Material mMat;
    [Range(0,1)]
    public float Percent = 1;

    void Awake()
    {
        var renderer = gameObject.GetComponent<MeshRenderer> ();
        mMat = renderer.material;
        var mf = gameObject.GetComponent<MeshFilter> ();
        mMat.SetFloat ("_Offset", mf.mesh.bounds.min.y);
        mMat.SetFloat ("_Range", mf.mesh.bounds.size.y);

    }
    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        mMat.SetFloat ("_Percent", Percent);
    }
}

 

Unity3D Shader 按百分比现实模型

标签:sha   return   2-2   isa   set   float   size   xtu   ati   

原文地址:http://www.cnblogs.com/mrblue/p/7599607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!