Skip to content

Repository files navigation

XTween 动画插件 (源于Unity 6000.0.38f1开发)

licensesupported

📦 兼容版本 Unity 6000.0.38f1 - release

📦 兼容版本 Unity 2021.3.5f1 - release

📦 兼容版本 Unity 2022.3.62f3 - release

📦 兼容版本 Unity 2023.1.22f1 - release


教程与参考资料:https://blog.csdn.net/seven7745101/category_13131246.html

概述


XTween 是一个高性能的 Unity 动画系统,提供了丰富的动画类型、缓动效果和灵活的控制方式。它采用对象池技术优化性能,支持编辑器预览,适用于 UI 和游戏对象的动画处理。 并且该插件是一个功能全面、性能优化的 Unity 动画解决方案,适用于各种动画需求,从简单的 UI 动效到复杂的游戏对象动画。其架构清晰度和零GC设计特别适合需要大量动态动画的项目(如UI密集型游戏)。相比主流插件,它在类型扩展性和内存控制上有独特优势,而链式API和完整文档则降低了使用门槛


开源不易,您的支持是持续更新的动力,
这个小工具倾注了我无数个深夜的调试与优化,它永远免费,但绝非无成本,如果您觉得这个工具
能为您节省时间、解决问题,甚至带来一丝愉悦,请考虑赞助一杯咖啡,让我知道:有人在乎这份付出,而这将成为我熬夜修复Bug、
添加新功能的最大动力。开源不是用爱发电,您的认可会让它走得更远
欢迎加入技术研讨群,在这里可以和我以及大家一起探讨插件的优化以及相关的技术实现思路,同时在做项目时遇到的众多问题以及瓶颈
阻碍都可以互相探讨学习

📦 DEMO效果预览


📦 架构设计特色


分层架构

  • 核心层:XTween_Base 抽象基类处理通用动画逻辑(生命周期/进度计算/回调系统)
  • 实现层:7种特化类型(Float/Int/Vector2/Vector3/Color/Quaternion/String)各自实现类型安全的插值计算
  • 管理层:XTween_Manager单例全局管理,XTween_Pool对象池优化性能

多态设计

  • 通过抽象方法强制子类实现类型相关逻辑:
protected abstract T Lerp(T a, T b, float t);
protected abstract T GetDefaultValue();

ECS式数据驱动

  • 每个Tween实例包含完整动画参数(start/end/duration/easeMode等)
  • 通过Update()方法纯数据计算,与Unity组件解耦

📦 性能优化特色


  • 零GC设计
  • 使用对象池(XTween_Pool)复用实例
  • 链表+字典管理活跃动画(避免List扩容)
  • 预编译指令分离编辑器/运行时逻辑
  • 高效更新机制
  • 双缓冲队列:_PendingAdd/_PendingRemove避免迭代时修改
  • 迭代器缓存:_ActiveTweens_CachedIterators减少遍历开销
  • 延迟计算:按需重建缓存(_IteratorsDirty标记)
  • 内存安全
  • 自动清理无效引用(CleanDeadReferences)
  • 回调注销检查(避免内存泄漏)

📦 核心组件


🌱 Controller🌱 Interface🌱 Pool🌱 Manager🌱 EaseLibrary🌱 Previewer
动画控制器动画接口动画池动画管理器缓动库预览器
动画控制器,支持多种动画类型(位置、旋转、缩放、颜色等),可配置动画参数(持续时间、延迟、缓动模式等,提供按键控制(播放、倒带、终止等)**支持多种动画类型(位置、旋转、缩放、颜色等),可配置动画参数(持续时间、延迟、缓动模式等),提供按键控制(播放、倒带、终止等)支持多种动画类型(位置、旋转、缩放、颜色等),可配置动画参数(持续时间、延迟、缓动模式等),提供按键控制(播放、倒带、终止等)动画注册/注销,每帧更新动画状态,提供动画查找功能Linear(线性),Sine(正弦),Quad(二次),Cubic(三次),Elastic(弹性),Bounce(弹跳)等动画注册/注销,每帧更新动画状态,提供动画查找功能

📦 类型特化(统一特性:继承自XTween_Base<T>、支持ReturnSelf()链式调用、提供默认构造和参数构造)


类型说明关键方法默认值应用场景
Specialized_Color处理颜色(Color)动画,支持RGBA通道插值Color.LerpUnclamped()Color.whiteUI颜色变化、透明度动画
Specialized_Float处理浮点数(float)动画,实现平滑过渡Mathf.Lerp()0f进度条、数值变化
Specialized_Int处理整数(int)动画,支持离散值变化Mathf.Lerp()+RoundToInt()0分数计数、整数显示
Specialized_Quaternion处理四元数(Quaternion)动画,支持3D旋转Quaternion.Lerp/SlerpUnclamped()Quaternion.identity3D物体旋转
Specialized_String处理字符串(string)动画,支持逐字显示字符截取计算string.Empty打字机效果
Specialized_Vector2处理二维向量(Vector2)动画Vector2.LerpUnclamped()Vector2.zero2D位置/尺寸变化
Specialized_Vector3处理三维向量(Vector3)动画Vector3.LerpUnclamped()Vector3.zero3D变换动画
Specialized_Vector4处理四维向量(Vector4)动画Vector4.LerpUnclamped()Vector4.zero特殊参数控制

📦 丰富的缓动库


缓动类型InOutInOut缓动类型InOutInOut
Linear
线性
--Sine
正弦曲线
Quad
二次曲线
--Cubic
三次曲线
Quart
四次曲线
--Quint
五次曲线
Expo
指数曲线
--Circ
圆形曲线
Elastic
弹性曲线
--Back
回退曲线
Bounce
弹跳曲线

📦 灵活的扩展类


序号类名称分类
XTween.Alpha透明度动画
XTween.AnchoredPosition锚点位置动画
XTween.Color颜色动画
XTween.Fill填充动画
XTween.Path路径动画
XTween.Rotation旋转动画
XTween.Scale缩放动画
XTween.Shake抖动动画
XTween.Size尺寸动画
XTween.Text文本动画
XTween.Tiled平铺动画
XTween.TmpTextTMP文本动画
XTween.To.Color颜色过渡
XTween.To_Float浮点数过渡
XTween.To_Int整数过渡
XTween.To.String字符串过渡
XTween.To.Vector2二维向量过渡
XTween.To.Vector3三维向量过渡
XTween.To.Vector4四维向量过渡

📦 可视化路径工具



📦 可视化动画控制器



📦 可视化动画管理器



📦 生命周期


▶️Tween_Controller

flowchart LR
%% ===== 核心流程 =====
A([创建 / Tween_Create]) --> B([播放 / Tween_Play])
B --> C{用户操作}
C -->|暂停| D([暂停 / Tween_Pause])
D -->|继续| B
C -->|重播| E([重播 / Tween_Replay])
E --> B
C -->|停止| F([停止 / Tween_Stop])
F --> G([销毁 / Tween_Kill])
G --> H[对象池回收]
%% ===== 循环路径 =====
H -.->|复用| A
%% ===== 样式定义 =====
classDef process fill:#8bffc4,stroke:#ffffff00,stroke-width:2px,rx:8px,ry:8px
classDef decision fill:#ff9966,stroke:#fbbc0400
classDef endpoint fill:#5AB2F6,stroke:#4285f400,rx:8px,ry:8px
class A,B,D,E,F,G process
class C decision
class H endpoint
%% ===== 方法名样式 =====
classDef method font-style:normal,font-size:20px,color:#000000
class A,B,C,D,E,F,G,H method
Loading

▶️XTween_Pool

flowchart LR
%% ===== 核心流程 =====
A([初始化 / PreloadAll]) --> B([创建 / CreateTween])
B --> C{池中可用?}
C -->|是| D[从池中取出]
C -->|否| E{AutoExpand?}
E -->|是| F[扩容池]
E -->|否| G[返回null/警告]
F --> D
D --> H([使用 / RegisterTween])
H --> I{用户操作}
I -->|完成| J([回收 / RecycleTween])
I -->|强制回收| K([ForceRecycleAll])
J --> B
K --> J
%% ===== 统计路径 =====
B --> L([统计 / Count_Created++])
J --> M([统计 / Count_Created--])
A --> N([统计 / Count_Preloaded初始化])
%% ===== 样式定义 =====
classDef process fill:#8bffc4,stroke:#ffffff00,stroke-width:2px,rx:8px,ry:8px
classDef decision fill:#ff9966,stroke:#fbbc0400
classDef endpoint fill:#5AB2F6,stroke:#4285f400,rx:8px,ry:8px
classDef stat fill:#ffccf9,stroke:#ffffff00
class A,B,D,F,H,J,K process
class C,E decision
class G endpoint
class L,M,N stat
%% ===== 方法名样式 =====
classDef method font-style:normal,font-size:20px,color:#000000
class A,B,C,D,E,F,G,H method
%% ===== 特殊说明 =====
click A "javascript:alert('预加载所有类型动画')"
click B "javascript:alert('从池获取/创建新实例')"
click J "javascript:alert('重置状态后回收入池')"
click K "javascript:alert('强制终止并回收所有动画')"
Loading

▶️XTween_Manager

flowchart LR
%% ===== 核心流程 =====
A([初始化 / Manager_Awake]) --> B([注册 / RegisterTween])
B --> C{动画状态}
C -->|播放| D([更新 / UpdateActiveTweens])
C -->|暂停| E([暂停 / Tween_Pause])
E -->|继续| D
C -->|完成| F([回收 / UnregisterTween])
F --> G([对象池回收])
C -->|强制终止| H([批量清理 / Kill_All])
%% ===== 管理循环 =====
D --> C
G -.->|复用| B
%% ===== 样式定义 =====
classDef process fill:#8bffc4,stroke:#ffffff00,stroke-width:2px,rx:8px,ry:8px
classDef decision fill:#ff9966,stroke:#fbbc0400
classDef endpoint fill:#5AB2F6,stroke:#4285f400,rx:8px,ry:8px
class A,B,D,E,F process
class C decision
class G,H endpoint
%% ===== 方法名样式 =====
classDef method font-style:normal,font-size:20px,color:#000000
class A,B,C,D,E,F,G,H method
%% ===== 特殊说明 =====
click A "javascript:alert('单例初始化+预加载池')"
click D "javascript:alert('每帧更新+迭代器缓存优化')"
click F "javascript:alert('清理索引+移入待处理队列')"
Loading

▶️XTween_Previewer

flowchart LR
%% ===== 核心流程 =====
A([初始化 / Initialize]) --> B([添加动画 / Append])
B --> C([准备播放 / Prepare])
C --> D([播放 / Play])
D --> E{动画状态}
E -->|播放中| F([更新 / Update])
E -->|完成| G([自动终止 / AutoKill])
E -->|用户操作| H{控制指令}
%% ===== 控制分支 =====
H -->|倒带| I([Rewind])
H -->|终止| J([Kill])
H -->|清空| K([Clear])
%% ===== 循环路径 =====
I --> D
J --> B
K --> B
G --> B
%% ===== 样式定义 =====
classDef process fill:#8bffc4,stroke:#ffffff00,stroke-width:2px,rx:8px,ry:8px
classDef decision fill:#ff9966,stroke:#fbbc0400
classDef endpoint fill:#5AB2F6,stroke:#4285f400,rx:8px,ry:8px
class A,B,C,D,F,G,I,J,K process
class E,H decision
%% ===== 方法名样式 =====
classDef method font-style:normal,font-size:20px,color:#000000
class A,B,C,D,E,F,G,H method
%% ===== 特殊说明 =====
click A "javascript:alert('静态初始化+注册编辑器更新事件')"
click F "javascript:alert('每帧检测:\\n1. 自动停止条件\\n2. 动画状态更新\\n3. 场景重绘')"
click G "javascript:alert('触发条件:\\n1. 达到MaxTotalDuration\\n2. 所有动画完成')"
Loading

▶️XTween_Base (With Specialized)

flowchart TB
%% ===== 核心继承结构 =====
A([XTween_Base<T>]) -->|抽象基类| B[核心生命周期]
A --> C[通用功能]
A --> D[模板方法]
%% ===== 具体实现类 =====
B --> E([Specialized Float])
B --> F([Specialized Int])
B --> G([Specialized Color])
B --> H([Specialized Vector2/3/4])
B --> I([Specialized Quaternion])
B --> J([Specialized String])
%% ===== 方法实现差异 =====
E -->|Mathf.Lerp| K[数值插值]
F -->|RoundToInt| L[整数处理]
G -->|Color.Lerp| M[颜色过渡]
H -->|Vector.Lerp| N[向量运算]
I -->|Quaternion.Slerp| O[旋转插值]
J -->|Substring| P[字符动画]
%% ===== 样式定义 =====
classDef abstract fill:#8bffc4,stroke:#388E3C,color:white,rx:8px,ry:8px,font-style:normal,font-size:20px,color:#000000
classDef concrete fill:#5AB2F6,stroke:#1565C0,rx:8px,ry:8px,font-style:normal,font-size:20px,color:#000000
classDef method fill:#FF9800,stroke:#F57C00,rx:8px,ry:8px,font-style:normal,font-size:16px,color:#000000
class A abstract
class E,F,G,H,I,J concrete
class K,L,M,N,O,P method
%% ===== 交互说明 =====
click A "javascript:alert('提供核心生命周期管理\\n- Play/Pause/Kill\\n- 进度计算\\n- 回调系统')"
click E "javascript:alert('Float特性:\\n- 精确浮点计算\\n- 支持所有缓动模式')"
click J "javascript:alert('String特性:\\n- 字符逐显效果\\n- 特殊进度计算')"
Loading

About

XTween 是一个高性能的 Unity 动画系统,提供了丰富的动画类型、缓动效果和灵活的控制方式。它采用对象池技术优化性能,支持编辑器预览,适用于 UI 和游戏对象的动画处理。 并且该插件是一个功能全面、性能优化的 Unity 动画解决方案,适用于各种动画需求,从简单的 UI 动效到复杂的游戏对象动画

Topics

Resources

Stars

66 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages