Unity【DoTween】- 如何使Transform Tween动画序列可编辑

简介: Unity【DoTween】- 如何使Transform Tween动画序列可编辑

使用DoTween的动画序列功能时,我们需要编写类似这样的代码:

DOTween.Sequence()
    .Append(transform.DOMove(new Vector3(1f, 2f, 3f), 1f))
    .Append(transform.DORotate(new Vector3(0f, 0f, 0f), 1f));

image.gif

本文介绍的内容可以将DoTween的这种动画序列在编辑器中进行编辑,如图所示:

image.gif

image.gif

实现代码:

using System;
using DG.Tweening;
using UnityEngine;
namespace SK.Framework
{
    [Serializable]
    public sealed class TransformTweenAnimation
    {
        public Transform actor;
        public TransformTweenAnimationType type;
        public SpaceType space;
        public bool isCustom;
        public Vector3 startValue;
        public Vector3 endValue;
        public float duration = 1f;
        public float delay;
        public Ease ease;
        public RotateMode rotateMode;
        public Tween Play()
        {
            switch (type)
            {
                case TransformTweenAnimationType.Move:
                    switch (space)
                    {
                        case SpaceType.Local:
                            if (isCustom) actor.localPosition = startValue;
                            return actor.DOLocalMove(endValue, duration).SetDelay(delay).SetEase(ease);
                        case SpaceType.Global:
                            if (isCustom) actor.position = startValue;
                            return actor.DOMove(endValue, duration).SetDelay(delay).SetEase(ease);
                        default: return null;
                    }
                case TransformTweenAnimationType.Rotate:
                    switch (space)
                    {
                        case SpaceType.Local:
                            if (isCustom) actor.localRotation = Quaternion.Euler(startValue);
                            return actor.DOLocalRotate(endValue, duration, rotateMode).SetDelay(delay).SetEase(ease);
                        case SpaceType.Global:
                            if (isCustom) actor.rotation = Quaternion.Euler(startValue);
                            return actor.DORotate(endValue, duration, rotateMode).SetDelay(delay).SetEase(ease); 
                        default: return null;
                    }
                case TransformTweenAnimationType.Scale:
                    if (isCustom) actor.localScale = startValue;
                    return actor.DOScale(endValue, duration).SetDelay(delay).SetEase(ease);
                default: return null;
            }
        }
    }
}

image.gif

namespace SK.Framework
{
    public enum TransformTweenAnimationType 
    {
        Move,
        Rotate,
        Scale
    }
}

image.gif

namespace SK.Framework
{
    public enum SpaceType 
    {
        Local,
        Global
    }
}

image.gif

using System;
using DG.Tweening;
namespace SK.Framework
{
    [Serializable]
    public sealed class TransformTweenAnimations
    {
        public bool isSequence;
        public TransformTweenAnimation[] tweens = new TransformTweenAnimation[0];
        public void Play()
        {
            if (isSequence)
            {
                Sequence sequence = DOTween.Sequence();
                for (int i = 0; i < tweens.Length; i++)
                {
                    sequence.Append(tweens[i].Play());
                }
                sequence.Play();
            }
            else
            {
                for (int i = 0; i < tweens.Length; i++)
                {
                    tweens[i].Play();
                }
            }
        }
    }
}

image.gif

使用示例:

using UnityEngine;
using SK.Framework;
public class TEST : MonoBehaviour
{
    [SerializeField] private TransformTweenAnimations animations;
    private void Start()
    {
        animations.Play();
    }
}

image.gif

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