unity之Dotween动画实现依次显示

简介: unity制作炫酷动画
推荐阅读:

前言

前面时间赶项目,现在到了优化的时间,各种功能修改,动画特效增加,头都大了。又到了自己最不擅长,最讨厌的加动画时间。虽然各种动画看来让人赏心悦目但是可能真的是不擅长的原因,总是拒它于千里之外。虽然内心是抗拒的,但,在其位,谋其职,逃不脱也躲不掉。算了,不吐槽了,撸起袖子就是干。这次要实现的动画是:几行文本,逐渐显示。例如:第一行文本显示后间隔x秒显示第二行,第二行显示后,间隔x秒显示第三行...以此类推。

开始

首先将文字内容初始化并用顺序表self.joinMe存储起来。由于文本要显示出来,那么初始状态注定是要将其隐藏的。最终每行显示的内容为XXX:XXX

local title = {
    [1] = "微信公众号",[2] = "微信号",[3] = "QQ群[1]",[4] = "QQ群[2]",
    [5] = "接单赚钱群", [6] = "csdn" ,  
}
local name = {
    [1] = "爱上游戏开发",[2] = "codequeen",[3] = "704621321",[4] = "710234797",
    [5] = "234975680", [6] = "https://blog.csdn.net/shirln",
}
self.joinMe = {}
for i=1,6 do
    self.joinMe[i] = transform:Find("joinMe/"..i):GetComponent("Text") 
    self.joinMe[i].text = string.format("%s:%s",title[i],name[i])
    self.joinMe[i].gameObject:SetActive(false)
end

动画

接下来就是实现动画播放了

尝试一

最开始的想法是使用for循环来添加动画,如下:

local function playAnim(self)
    for i,v in ipairs(self.joinMe) do
        self.joinMe[i].gameObject.transform:DOScale(1, 1):SetDelay(0):OnComplete(
        function()
            self.joinMe[i].gameObject:SetActive(true)
        end)
    end
end

最终的效果是,肉眼可见的同时出现,思考一下,这是为什么?是的,因为这里for循环里是执行动画,
它不会等动画执行完再进行i+1,而是只要执行了动画播放就回i+1循环。

尝试二

后来我就想,要控制i的递增,while可以实现该效果,如下:

local function playAnim(self)
    local index = 1
    while(index>7) do
        self.joinMe[index].transform:DOScale(1, 1):SetDelay(0):OnComplete(
        function()
            self.joinMe[index]:SetActive(true)
            index = index + 1
        end)
    end
end

最终的效果是,惨不忍睹的死循环。这里原因就更简单了,动画没播放完,i不会递增,
那么这时候就永远满足条件。那么就会造成死循环。

尝试三

最终,为了达到动画效果,只能采取这种笨得不能再笨得方法了:

local function playAnim(self)
    self.joinMe[1].transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[1]:SetActive(true)
    end)
    self.joinMe[2].transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[2]:SetActive(true)
    end)
    self.joinMe[3].transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[3]:SetActive(true)
    end)
    self.joinMe[4].transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[4]:SetActive(true)
    end)
    self.joinMe[5].transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[5]:SetActive(true)
    end)
     self.joinMe[6].transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[6]:SetActive(true)
    end)
    self.joinMe[7].transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[7]:SetActive(true)
    end)
end

尝试四

哎,方法三这个代码看得我脑壳痛,不行,还是得优化一下,哦!以前不是学过递归方法吗,也许可以呢,尝试一下:

local function JoinMeAnim(self,index)
    self.joinMe[index].gameObject.transform:DOScale(1, 1):SetDelay(0):OnComplete(
    function()
        self.joinMe[index].gameObject:SetActive(true)
        index = index + 1
        JoinMeAnim(self,index)
    end)

嘿,居然可以了,小姐姐牛逼!!!此时内心突然开始为自己鼓掌了。

效果

在这里插入图片描述

说明

DOScale(参数1,参数2):参数2是该动画播放的时长:即,此动画从开始播放到下动画开始播放的时长。
SetDelay(参数):参数代表该动画延迟多长时间播放
通过说明可知,可以通过某些参数值来控制动画时长。例如,上述代码动画播放过慢,我们可以通过调节上述参数达到下面效果。
在这里插入图片描述

总结

通过对以上四种方法的尝试加分析,得出的结论是:
不可以采用:方法1,方法2
可以采用:方法3,方法4
推荐采用:方法4

相关文章
|
4月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
220 6
|
3月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
167 3
|
4月前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
114 0
|
4月前
|
开发者 图形学 前端开发
绝招放送:彻底解锁Unity UI系统奥秘,五大步骤教你如何缔造令人惊叹的沉浸式游戏体验,从Canvas到动画,一步一个脚印走向大师级UI设计
【8月更文挑战第31天】随着游戏开发技术的进步,UI成为提升游戏体验的关键。本文探讨如何利用Unity的UI系统创建美观且功能丰富的界面,包括Canvas、UI元素及Event System的使用,并通过具体示例代码展示按钮点击事件及淡入淡出动画的实现过程,助力开发者打造沉浸式的游戏体验。
116 0
|
4月前
|
图形学
Unity动画☀️Unity动画系统Bug集合
Unity动画☀️Unity动画系统Bug集合
|
6月前
|
图形学
【unity小技巧】受伤屏幕闪红、死亡动画、死亡黑屏效果
【unity小技巧】受伤屏幕闪红、死亡动画、死亡黑屏效果
231 2
|
6月前
|
图形学
【unity小技巧】FPS简单的射击换挡瞄准动画控制
【unity小技巧】FPS简单的射击换挡瞄准动画控制
40 0
|
6月前
|
人工智能 图形学
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
67 0
|
6月前
|
图形学
【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果
【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果
46 0
|
6月前
|
图形学
【unity小技巧】最简单的FPS游戏准心跳动动画控制
【unity小技巧】最简单的FPS游戏准心跳动动画控制
47 0