虚拟仿真Unity3D中模型的渐隐渐现效果实现

Posted 恬静的小魔龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟仿真Unity3D中模型的渐隐渐现效果实现相关的知识,希望对你有一定的参考价值。

推荐阅读

一、前言

最近项目上要实现一个模型渐隐渐现的效果,研究了一下,分享出来。

这个主要是用到了Shader(但不用学)和DoTween动画插件。

文中示例代码简单明了,感兴趣的小伙伴可以参考一下。

二、效果展示及源码下载


源码下载:

https://download.csdn.net/download/q764424567/20079897

三、正文

界面没啥好说的:

代码:

using DG.Tweening;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestDissolve : MonoBehaviour
{
    public GameObject model;
    private List<Material> materials = new List<Material>();
    public Button Btn_FadeOut;
    public Button Btn_FadeInt;

    private void Start()
    {
        //获取材质
        GetMeterials();
        Btn_FadeOut.onClick.AddListener(FadeOut);
        Btn_FadeInt.onClick.AddListener(FadeIn);
    }
    private void GetMeterials()
    {
        Material[] materals;
        MeshRenderer[] meshRendererer = model.GetComponentsInChildren<MeshRenderer>();
        foreach (var item in meshRendererer)
        {
            materals = item.materials;
            foreach (Material m in materals)
            {
                if (!materials.Contains(m))
                {
                    materials.Add(m);
                }
            }
        }
        for (int i = 0; i < materials.Count; i++)
        {
            Material m = materials[i];
            m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
            m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
            m.SetInt("_ZWrite", 0);
            m.DisableKeyword("_ALPHATEST_ON");
            m.EnableKeyword("_ALPHABLEND_ON");
            m.DisableKeyword("_ALPHAPREMULTIPLY_ON");
            m.renderQueue = 3000;
        }
    }

    private void FadeOut()
    {
        for (int i = 0; i < materials.Count; i++)
        {
            Material m = materials[i];
            Color color = m.color;
            m.DOColor(new Color(color.r, color.g, color.b, 0), 3f);
        }
    }

    private void FadeIn()
    {
        for (int i = 0; i < materials.Count; i++)
        {
            Material m = materials[i];
            Color color = m.color;
            m.DOColor(new Color(color.r, color.g, color.b,1), 3f);
        }
    }
}

效果:

四、后言

这个消融的shader看起来还是有点粗糙的,如果想要实现精细的shader效果,可以找shader程序员,不过对于虚拟仿真工业级别的显示还是可以用的。

以上是关于虚拟仿真Unity3D中模型的渐隐渐现效果实现的主要内容,如果未能解决你的问题,请参考以下文章

虚拟仿真实现Slider控制模型的从上到下消失

虚拟仿真实现Slider控制模型的从上到下消失

前端模拟手机屏幕图片渐隐渐现效果实现

Unity3D中UGUI不使用DOTween制作渐隐渐现效果

unity3d 场景切换 时的渐隐渐显效果是怎么实现的啊!!

在Unity5中使用C#脚本实现UI的下滑变色渐隐渐现效果