zl程序教程

您现在的位置是:首页 >  其它

当前栏目

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

实现 模型 效果 仿真 虚拟 Unity3D
2023-09-11 14:19:57 时间

推荐阅读

一、前言

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

这个主要是用到了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程序员,不过对于虚拟仿真工业级别的显示还是可以用的。