Unity3D中模型的渐隐渐现效果实现
一、前言
最近项目上要实现一个模型渐隐渐现的效果,研究了一下,分享出来。
这个主要是用到了Shader(但不用学)和DoTween动画插件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using UnityEngine; using System.Collections; public class TestClass : MonoBehaviour {<br> private float AlphaValue = 1.0f; private float time = 0.0f; private bool state = false ;<br> void Update() { time += Time.deltaTime; if (time > 0.2f){ state = true ; time = 0; } if (state) { AlphaValue -= 0.1f; } GameObject.Find(“YourGameObject”).renderer.material.color = new Color(0.5f, 0.3f, 1, AlphaValue); print(AlphaValue); } } |
二、效果展示及源码下载
源码下载:
https://download.csdn.net/download/q764424567/20079897
三、正文
界面没啥好说的:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 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程序员,不过对于虚拟仿真工业级别的显示还是可以用的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!