Unity UI动效 - Toggle切换动画

这篇具有很好参考价值的文章主要介绍了Unity UI动效 - Toggle切换动画。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


简介

如下图所示,当ToggleOnValueChanged事件执行时,会播放相应的切换动画,该功能可以通过Animation Editor编辑帧动画来实现,而本文介绍如何通过代码实现。

togglegroup unity 过渡动画,Unity 开发日志,Unity,UI,Animation,Toggle,动效

实现

Off & On

using UnityEngine;
using UnityEngine.UI;

namespace SK.Framework.UI
{
    [RequireComponent(typeof(Toggle))]
    public class ToggleAnimation : MonoBehaviour
    {
        [SerializeField] private RectTransform off;
        [SerializeField] private RectTransform on;
    }
}

togglegroup unity 过渡动画,Unity 开发日志,Unity,UI,Animation,Toggle,动效

OnValueChanged

为Toggle添加值变更事件:

using UnityEngine;
using UnityEngine.UI;

namespace SK.Framework.UI
{
    [RequireComponent(typeof(Toggle))]
    public class ToggleAnimation : MonoBehaviour
    {
        [SerializeField] private RectTransform off;
        [SerializeField] private RectTransform on;

        private Toggle toggle;

        private void Awake()
        {
            toggle = GetComponent<Toggle>();
            toggle.onValueChanged.AddListener(OnValueChanged);
        }

        private void OnValueChanged(bool isOn)
        {
			//TODO:
        }
    }
}

Start、Stop Coroutine

动画的切换过程在协程中实现,当值变更时,判断当前若正在运行协程,将其终止,然后开启相应的Switch2OnSwitch2Off动画:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

namespace SK.Framework.UI
{
    [RequireComponent(typeof(Toggle))]
    public class ToggleAnimation : MonoBehaviour
    {
        [SerializeField] private RectTransform off;
        [SerializeField] private RectTransform on;

        private Toggle toggle;
        private Coroutine coroutine;

        private void Awake()
        {
            toggle = GetComponent<Toggle>();
            toggle.onValueChanged.AddListener(OnValueChanged);
        }

        private void OnValueChanged(bool isOn)
        {
            if (coroutine != null)
                StopCoroutine(coroutine);

            coroutine = isOn ? StartCoroutine(Switch2OnCoroutine()) 
            : StartCoroutine(Switch2OffCoroutine());
        }

        private IEnumerator Switch2OnCoroutine()
        {
			//TODO:
        }

        private IEnumerator Switch2OffCoroutine()
        {
			//TODO:
        }
    }
}

Switch Animation

声明float类型变量,用于标识动画的时长,动画开始时,记录开始时间,当Time.time减去该开始时间小等于动画时长时,在for循环中通过插值运算计算相应的坐标:

float beginTime = Time.time;
for (; Time.time - beginTime <= duration;)
{
    float t = (Time.time - beginTime) / duration;
    on.position = Vector3.Lerp(offPosition, onPosition, t);
    yield return null;
}
on.position = onPosition;
coroutine = null;

完整代码:文章来源地址https://www.toymoban.com/news/detail-767181.html

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

namespace SK.Framework.UI
{
    [RequireComponent(typeof(Toggle))]
    public class ToggleAnimation : MonoBehaviour
    {
        [SerializeField] private RectTransform off;
        [SerializeField] private RectTransform on;
        //动画时长
        [SerializeField, Range(0.1f, 0.3f)] private float duration = 0.2f;

        private Toggle toggle;
        private Coroutine coroutine;
        private Vector3 offPosition;
        private Vector3 onPosition;

        private void Awake()
        {
            toggle = GetComponent<Toggle>();
            toggle.onValueChanged.AddListener(OnValueChanged);
        }

        private void Start()
        {
            offPosition = off.position;
            onPosition = on.position;
            off.gameObject.SetActive(!toggle.isOn);
            on.gameObject.SetActive(toggle.isOn);
        }

        private void OnValueChanged(bool isOn)
        {
            if (coroutine != null)
                StopCoroutine(coroutine);

            coroutine = isOn ? StartCoroutine(Switch2OnCoroutine()) : StartCoroutine(Switch2OffCoroutine());
        }

        private IEnumerator Switch2OnCoroutine()
        {
            off.gameObject.SetActive(false);
            on.gameObject.SetActive(true);

            float beginTime = Time.time;    
            for (; Time.time - beginTime <= duration; )
            {
                float t = (Time.time - beginTime) / duration;
                on.position = Vector3.Lerp(offPosition, onPosition, t);
                yield return null;
            }
            on.position = onPosition;
            coroutine = null;
        }

        private IEnumerator Switch2OffCoroutine()
        {
            on.gameObject.SetActive(false);
            off.gameObject.SetActive(true);

            float beginTime = Time.time;
            for (; Time.time - beginTime <= duration;)
            {
                float t = (Time.time - beginTime) / duration;
                off.position = Vector3.Lerp(onPosition, offPosition, t);
                yield return null;
            }
            off.position = offPosition;
            coroutine = null;
        }
    }
}

到了这里,关于Unity UI动效 - Toggle切换动画的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity人物基础动画应用。行走、待机之类的简单动画切换。

    @[TOC]unity人物基础动画应用 直接将项目拖入资源层级就好。这里推荐一个网站,可以给导入网站的模型自动绑骨,并且可挑选动画下载。网站自身也带有很多模型可以直接下载。免费又好用,就是可能网有点慢。 链接: link 1)在项目管理器中右键-创建-动画控制器。双击新建的

    2024年02月08日
    浏览(57)
  • Flutter动画库:animations(路由过渡动画或者页面切换动画)

    animations 是一个 Flutter 库,它提供了一组用于创建动画效果的工具和组件。 这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 看了下官方文档和官方例子,然后就有点懵。差点以为找错库了。还好flutter中的库可以直接点开(

    2024年02月16日
    浏览(48)
  • Unity UGUI的ToggleGroup(选项组)组件的介绍及使用

    ToggleGroup(选项组)是Unity UGUI中的一个组件,用于管理一组Toggle(选项)的选择状态。ToggleGroup组件可以确保在同一个ToggleGroup中只有一个Toggle被选中,其他Toggle将自动取消选中状态。 ToggleGroup组件通过监听Toggle的选择状态来实现管理功能。当一个Toggle被选中时,ToggleGroup会遍

    2024年02月16日
    浏览(52)
  • 【Unity2D】角色动画的切换

    第一种方法是设置一个中间状态,从中间状态向其余各种状态切换,且各状态向其他状态需要设置参数 实现动作转移时右键点击Make Transition即可  实现动画转移需要设置条件 点击一种动画到另一种动画的线 ,然后点击加号添加Condition 比如机器人从向左走切换到向右走的条件

    2024年02月15日
    浏览(57)
  • Unity教程3:使用BlendTree控制人物移动动画切换

    目录 创建动画文件 移动动画逻辑以及BlendTree的使用方法  创建移动变量 了解并使用混合树 实现保持移动方向的动画切换 手册链接在这:Unity User Manual (2019.3) - Unity 手册 实现了基本的人物移动代码后,为了使得我们的人物更加的生动有趣,我们还需要实现人物的动画效果。

    2024年02月13日
    浏览(45)
  • unity动画_UI动画案例 c#

    首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 创建基础通用包 在场景上创建一个Cube 选中Cube 在Window下点击Animation拖拽至运行窗口 点击创建 保存后 这个操作是给Cube添加了一个组件 对Cube_添加一个Position动画 设置几个帧位置的坐标(x,y,z)值 点击运行测试 再

    2024年02月03日
    浏览(32)
  • 👾 笔记 | react-transition-group 实现路由切换过渡动画

    React 18 React router v6 React Transition Group 是一个 React 库,专门用于在 React 应用中管理和处理过渡动画效果。这个库提供了一组组件,包括 Transition、CSSTransition、SwitchTransition 和 TransitionGroup,帮助在组件的进入和退出时应用动画效果。 Transition 是一个与平台无关的组件,通常结合

    2024年03月09日
    浏览(69)
  • Unity简单操作:设置触发条件 切换Animator动画控制器 里面播放的Animation动画

    确保animator里面有多个animation动画剪辑,点击Animator里面[Parameters]添加触发条件   添加连线箭头并且 给箭头连线绑定触发事件  添加连线箭头并且 给箭头连线绑定触发事件  

    2024年02月04日
    浏览(61)
  • Android打造丝滑的Activity recreate重建(主题切换)过渡动画

    当应用程序支持多种语言或主题时,切换语言或主题通常需要重新启动 Activity 以重新加载配置。虽然 recreate 是一种常用的重建 Activity 方法,但它不支持像在 Activity 之间切换时那样使用过渡动画。特别是在切换 浅色/深色 主题时,由于缺乏过渡动画而显得很生硬。为了提升改

    2024年02月22日
    浏览(48)
  • Unity--互动组件(Toggle)

    1.组件的可交互 2.组件的过渡状态 3.组件的导航 4.Toggle的属性和参数设置 Toggle 切换控制是一个复选框,允许用户打开或关闭的一个选项; Is on:( 开启 ) 拨动开关是否从一开始就打开了? Toggle Transition:( 切换过渡 ) 更改其值时,切换以图形方式做出反应的方式。选项为

    2024年01月19日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包