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

在这里插入图片描述

👉一、前言

之前写了一篇实现图片渐变色效果的文章: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;//图片1
    private Image showImg2;//图片2
    public 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)
    {
        //判断当前显示的精灵图下标是否小于链表精灵图总数量-1
        if (imgCount<sprites.Count-1)
        {
            imgCount++;
        }
        else
        {
            imgCount = 0;//超过则从下标0重新开始
        }
        img.sprite = sprites[imgCount];//替换当前图片的精灵图为下次要显示的精灵图
    }
    // 停止播放事件
    private void StopSildeShow()
    {
        DOTween.KillAll();//砍掉所以补间动画
    }
}

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

  • 27
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周的Unity小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值