Unity3D 马赛克效果

文字显示过度,有点科技的效果,黑客帝国风???

在这里插入图片描述
shader

v2f vert(appdata_t v)
{
    v2f OUT;
    UNITY_SETUP_INSTANCE_ID(v);
    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
    OUT.worldPosition = v.vertex;
    OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);

    OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);

    OUT.color = v.color * _Color;
    return OUT;
}

fixed4 frag(v2f IN) : SV_Target
{
    IN.texcoord.x = floor(IN.texcoord.x/_TillSize) * _TillSize;
	IN.texcoord.y = floor(IN.texcoord.y/_TillSize) * _TillSize;
    half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;

    #ifdef UNITY_UI_CLIP_RECT
    color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
    #endif

    #ifdef UNITY_UI_ALPHACLIP
    clip (color.a - 0.001);
    #endif

    return color;
}

马赛克代码

public class MasaicUI : MonoBehaviour
{
    public float timeSince = 0f;
    public float endTime = 0f;

    public AnimationCurve alphaSpectrum = new AnimationCurve(new Keyframe(0f, 0.5f), new Keyframe(.15f, 0f));

    public float mocsaic;

    private Material matarial;

    private void OnEnable()
    {
        mocsaic = 0.1f;
        timeSince = 0;
    }

    // Use this for initialization
    void Start()
    {
        matarial = GetComponent<Text>().material;
        endTime = alphaSpectrum.keys[1].time;
        mocsaic = matarial.GetFloat("_TillSize");
    }

    // Update is called once per frame
    void Update()
    {
        if (mocsaic <= 0.0001)
        {
            mocsaic = 0.0001f;
        }

        timeSince += Time.deltaTime;
        mocsaic = alphaSpectrum.Evaluate(timeSince);
        matarial.SetFloat("_TillSize", mocsaic);
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值