[开发者心得] 【027】利用补间动画制作UI淡入淡出效果

[复制链接]
805 |0
哭唧唧的细狗 发表于 2023-11-1 19:28:43 | 显示全部楼层 |阅读模式
本帖最后由 哭唧唧的细狗 于 2023-11-2 09:35 编辑



游戏UI表现经常会有各种各样的出场入场表现,比如这里看到的淡入淡出效果,现阶段我们能够使用补间动画来达成这一目的

首先我们新建一个UI并导出其脚本

image.png


然后我们创建一个名为Fade的代码

image.png


在代码中,我们继承于之前UI生成的代码Fade_generate,利用补间动画修改UI的canvas节点的renderOpacity值


import Fade_Generate from "./ui-generate/Fade_generate";

export default class Fade extends Fade_Generate {

    /**
     * 构造UI文件成功后,在合适的时机最先初始化一次
     */
    protected onStart() {
        //设置能否每帧触发onUpdate
        this.canUpdate = true;
        this.layer = UILayerMiddle;

        if(SystemUtil.isServer()){
            return
        }

        
this.close.onPressed.add(()=>{
            // 补间动画 时间持续 500毫秒 透明度从1到0
            new Tween({a: 1}).to({a: 0}, 500).onUpdate((val)=>{
                this.rootCanvas.renderOpacity = val.a
            }).start().onComplete(()=>{
                // 结束后关闭UI
                UIService.hide(Fade)
            })
        })

        Event.addLocalListener("Fade", ()=>{
            // 补间动画 时间持续 500毫秒 透明度从0到1
            new Tween({a: 0}).to({a: 1}, 500).onUpdate((val)=>{
                this.rootCanvas.renderOpacity = val.a
            }).start().onStart(()=>{
                // 一开始就显示UI
                UIService.show(Fade)
            })
        })

    }

    /**
    * 每一帧调用
    * 通过canUpdate可以开启关闭调用
    * dt 两帧调用的时间差,毫秒
    */
    protected onUpdate(dt :number) {
        TweenUtil.TWEEN.update();
    }
}


关于补间动画,可以参考教程的这一章:
Tween - 补间动画 | 教程 (ark.online)


随后在DefaultUI中添加本地事件控制UI的显隐


InputUtil.onKeyDown(Keys.O, ()=>{
    Event.dispatchToLocal("Fade")
})



最小Demo:

UIFade.rar (92.45 KB, 下载次数: 45)
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表