600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Unity使用DOTween实现图片幻灯片渐变自动播放效果 超简单的

Unity使用DOTween实现图片幻灯片渐变自动播放效果 超简单的

时间:2022-08-17 01:33:09

相关推荐

Unity使用DOTween实现图片幻灯片渐变自动播放效果 超简单的

超详细的脚本注释哦!

👉一、前言👉二、幻灯片自动播放效果👉三、实现步骤及原理1.实现步骤2.原理👉四、核心代码脚本

👉一、前言

之前写了一篇实现图片渐变色效果的文章:Unity实现UGUI空物体颜色渐变的描边方法,有粉丝朋友留言说能不能写个实现图片幻灯片渐变效果的案例,那么现在它来咯!

demo效果及教程请看下文。

👉二、幻灯片自动播放效果

先来看看用Unity实现的图片幻灯片播放效果吧!

👉三、实现步骤及原理

1.实现步骤

Step1:搭建简单场景

demo场景只有两张图片和两个按钮组成就行,新建面板panel,新建两个图片和按钮放在panel下,分别命名如下图。

Step2:设置小细节

将图片一放到图片二之后,根据最后渲染的最先显示原理先显示图片一;将图片二的alpha值改为0,即将图片的color属性的color.a改为0,如下图:

2.原理

我们利用Dotween插件的队列动画实现这个幻灯片的效果。

这里我们用到:sequence.Append()sequence.Join()OnComplete()和DOFade()这四个方法,一起配合使用可以让图片一的alpha值从1渐变为0的同时,也让图片二的alpha值从0渐变为1。这样就实现了图片一渐变结束之后看到图片二的效果了;同理让图片二alpha从1变为0,同时图片二alpha从0变为1。在每个动画执行完成后添加回调函数触发替换图片的精灵图的方法,最后使用sequence.SetLoops(-1)方法,设置动画无限循环,这样就实现了图片渐变交替显示的幻灯片效果了。是不是很简单,下面我们看下如何写脚本去实现我们以上的逻辑。

👉四、核心代码脚本

新建脚本SlideShow.cs,挂载到Panel物体上(注意子对象Image和Button的命名,因为我这里用的是查找对象赋值的方法,名字一定要跟脚本一致,否则找不到会报错哦,还要注意拖拽精灵图赋值给sprites链表哦),

写下如下代码:(注释都写得很明白了吧!不懂再留言问我吧)

using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using DG.Tweening;//使用dotween动画需要的命名空间public class SlideShow : MonoBehaviour{private Button showBtn;//幻灯片播放按钮private Button stopBtn;//停止播放按钮private Image showImg;//图片1private Image showImg2;//图片2public List<Sprite> sprites = new List<Sprite>();//保存精灵图的链表,下标0、1、2、....private int imgCount = 1;//当前图片的下标,因为我初始已经赋值两张精灵图,所以下一张替换时从2开始private void Start(){//查找并赋值组件对象showImg =transform.Find("图片1").GetComponent<Image>();showImg2 = transform.Find("图片2").GetComponent<Image>();showBtn = transform.Find("Play").GetComponent<Button>();stopBtn = transform.Find("Stop").GetComponent<Button>();//为按钮注册事件showBtn.onClick.AddListener(ShowSildeImg);stopBtn.onClick.AddListener(StopSildeShow);}/// <summary>/// 幻灯片自动播放事件,使用dotween动画实现/// </summary>private void ShowSildeImg(){Sequence sequence= DOTween.Sequence();//声明一个dotween动画队列,按照队列先入先出的原则播放//添加图片一的动画一:图片1的alpha值5秒内从1变为0,实现图片渐变效果sequence.Append(showImg.DOFade(0, 5).OnComplete(() =>{//添加一个动画播放完成的回调函数OnComplete,lambda表达式写法,动画播放完成后替换精灵图ChangeSprite(showImg);Debug.Log("图片一精灵图替换为:" + (imgCount + 1));}));//动画一播放的同时加入图片的二的动画二与动画一同时播放:此时图片2的alpha值5秒内从0变为1。sequence.Join(showImg2.DOFade(1, 5));sequence.AppendInterval(1f);//延迟2秒后播放后面动画//添加同时播放的动画3和动画4,原理同上sequence.Append(showImg2.DOFade(0, 5).OnComplete(() =>{ChangeSprite(showImg2);Debug.Log("图片二精灵图替换为:" + (imgCount + 1));}));sequence.Join(showImg.DOFade(1, 5));sequence.AppendInterval(1);sequence.SetLoops(-1);//参数为-1表示设置动画为无限循环,就形成了一个幻灯片播放效果了}// 替换图片的精灵图private void ChangeSprite(Image img){//判断当前显示的精灵图下标是否小于链表精灵图总数量-1if (imgCount<sprites.Count-1){imgCount++;}else{imgCount = 0;//超过则从下标0重新开始}img.sprite = sprites[imgCount];//替换当前图片的精灵图为下次要显示的精灵图}// 停止播放事件private void StopSildeShow(){DOTween.KillAll();//砍掉所以补间动画}}

做好以上工作,开始运行就能看到图片幻灯片播放的效果了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。