关于 unity-dotween-design
unity-dotween-design 是用于编写和审查 DOTween 代码的参考模块,规则基于 DOTween 1.3.015 源码。规则标注源码位置,涵盖补间生命周期、序列、快捷方法、安全模式和集成。
主要功能
- 01附源码位置的 DOTween 设计规则
- 02补间生命周期与序列指导
- 03快捷方法和缓动参考
- 04安全模式与生命周期指导
- 05指向细分设计参考
适用场景
- 01审查 DOTween 初始化和设置代码
- 02检查序列组合与补间生命周期
- 03排查安全模式或目标对象生命周期问题
- 04查询快捷方法和缓动行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ besty0728/ unity-skills --skill unity-dotween-design安装后在 Claude Code 中输入/unity-dotween-design确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
BASICS.mdEASE.mdINTEGRATION.mdLIFETIME.mdPITFALLS.mdSEQUENCE.mdSHORTCUTS.mdTWEEN.md详细介绍
在调用此模块中的任何技能之前: 如果你准备根据技能名称或描述猜测参数后调用该技能,请停下——先阅读此文件(或通过
GET /skills/recommend?includeSchema=true获取其 schema)。如果你已经从 recommend/schema 中获得参数定义,可以直接进行 dryRun。
触发条件
- 编写或审查 DOTween 代码
- 构建序列动画
- 绑定补间生命周期
- 调试补间陷阱
- 编写或审查 DOTween 代码、构建序列动画、绑定补间生命周期、排查补间陷阱
DOTween - 设计规则
指导性模块。每条规则均摘自 Demigiant DOTween 源码,位于:
- 1.3.015 — 随附于
_DOTween.Assembly/DOTween/和bin/Modules/模块文件中(Unity 2018+)
每条规则都标注了具体的文件和行号,以便审核推理过程,并避免 AI 根据过时记忆自行发挥。
模式:仅文档——无 REST 技能需要设门槛;在任何运行模式(Approval / Auto / Bypass)下均可自由加载。
何时加载此模块
在编写或审查以下任何内容之前加载:
DOTween.Init(...)引导代码、DOTweenSettings 配置、SetTweensCapacity 调整- 任何
.DOMove / .DORotate / .DOScale / .DOColor / .DOFade / .DOShake* / .DOPath / .DOPunch*快捷调用 DOTween.Sequence()+.Append / .Join / .Insert / .Prepend / .AppendInterval / .PrependInterval / .AppendCallback.SetEase / .SetDelay / .SetLoops / .SetAutoKill / .SetLink / .SetId / .SetTarget / .SetUpdate / .SetRelative / .SetRecyclable / .SetSpeedBased.OnStart / .OnUpdate / .OnStepComplete / .OnComplete / .OnKill / .OnPlay / .OnPause / .OnRewind.AsyncWaitForCompletion / .AsyncWaitForKill / .AsyncWaitForRewind / .AsyncWaitForElapsedLoops / .AsyncWaitForPositiontween.ToUniTask(TweenCancelBehaviour, CancellationToken)(UniTask 桥接)DOTween.Kill(target, complete)/DOTween.KillAll()批量操作- 安全模式调试——
useSafeMode、safeModeLogBehaviour、nestedTweenFailureBehaviour - DOTween 模块生成(Audio / Physics / Physics2D / Sprite / UI / UnityUI / TextMeshPro)
关键规则摘要
| # | 规则 | 来源锚点 |
|---|---|---|
| 1 | DOTween.Init(recycleAllByDefault, useSafeMode, logBehaviour) 返回 IDOTweenInit,可用于流畅调用 .SetCapacity(...)。如果未显式调用,首次创建补间时会运行自动初始化(DOTween.cs:236 中的 AutoInit)。DOTween.Version = "1.3.015" 以 const 形式公开。 | DOTween.cs:38,227,236,243 |
| 2 | 每个补间都由单个标记为 DontDestroyOnLoad 的 [DOTween] GameObject MonoBehaviour(DOTweenComponent)驱动。它会在首次初始化时创建,并在场景加载后继续存在。不要销毁它——DOTween.Clear(destroy: true) 是唯一受支持的拆除方式。 | DOTweenComponent.cs:268-270, DOTween.cs:311 |
| 3 | 默认 autoKill = true:补间完成时会被销毁。销毁后,.Restart() / .Kill() / .Complete() 等调用将不执行任何操作(安全模式开启时),或引发 NullReferenceException(安全模式关闭时)。使用 .SetAutoKill(false) 可保留补间以便重播。 | DOTween.cs useSafeMode:49, TweenSettingsExtensions.cs:39,49 |
| 4 | 默认开启安全模式(useSafeMode = true)。补间播放期间目标被销毁 → 安全模式会捕获异常,并根据 safeModeLogBehaviour 记录日志(默认值:Warning)。开发期间可关闭安全模式,以查找缺失链接问题。 | DOTween.cs:49,51 |
| 5 | SetLink(gameObject, LinkBehaviour) 会将补间生命周期绑定到 GameObject。默认值为 LinkBehaviour.KillOnDestroy。如果不使用 SetLink,目标销毁后补间仍会继续运行,并依赖安全模式提供保护。 | TweenSettingsExtensions.cs:91,103, LinkBehaviour.cs |
| 6 | SetTarget(object target) 是使用 DOTween.Kill(target) / DOTween.KillAll(target) 对补间分组的必要条件。快捷扩展(.DOMove、.DOFade 等)会自动设置目标;手动调用 DOTween.To(...) 则不会。 | TweenSettingsExtensions.cs:116, DOTween.cs:884,892 |
| 7 | Sequence.Append(t) 会在前一个补间之后运行。Sequence.Join(t) 会与前一个补间并行运行。Sequence.Insert(float atPosition, t) 会在绝对时间位置插入。Sequence.Prepend(t) 会将补间推到最前面,并使现有内容后移。 | TweenSettingsExtensions.cs:499,508,517,528 |
| 8 | AsyncWaitForCompletion / AsyncWaitForKill / AsyncWaitForRewind 位于 DOTweenModuleUnityVersion.cs(MODULE 文件,受 `UNITY_2018_1_OR_NEWER && (NET_4_6 | |
| 9 | UniTask 桥接方法 tween.ToUniTask(TweenCancelBehaviour, CancellationToken) 位于 UniTask 的 External/DOTween/ 扩展中,是比 AsyncWaitForCompletion 更推荐的等待方式。TweenCancelBehaviour 有 9 个值(Kill / Complete / CancelAwait / KillAndCancelAwait / ...)。 | UniTask DOTweenAsyncExtensions.cs:14-27,54 |
| 10 | Ease 枚举有 38 个条目(36 个面向用户的条目 + 2 个保留的 INTERNAL_*):Unset / Linear + Sine/Quad/Cubic/Quart/Quint/Expo/Circ/Elastic/Back/Bounce 的 In/Out/InOut 变体(10 × 3 = 30 个数学缓动)+ Flash / InFlash / OutFlash / InOutFlash。DOTween 会为零时长补间和基于 AnimationCurve 的补间自动分配 INTERNAL_Zero 和 INTERNAL_Custom。 | Ease.cs:9-53 |
子文档路由
| 子文档 | 何时阅读 |
|---|---|
| BASICS.md | DOTween.Init、驱动器 GameObject、DOTweenSettings 资源、模块架构、安全模式、补间容量 |
| TWEEN.md | Tween 基类、Tweener 与 Sequence、autoKill、Play/Pause/Rewind/Restart/Kill/Complete/Goto 生命周期 |
| SEQUENCE.md | Sequence.Append / Join / Insert / Prepend / AppendInterval / PrependInterval / AppendCallback / InsertCallback、嵌套、循环组合 |
| SHORTCUTS.md | 按目标类型分类的 .DOMove / DOLocalMove / DOAnchorPos / DORotate / DOScale / DOColor / DOFade / DOPath / DOJump / DOPunch / DOShake* 速查表 |
| EASE.md | 完整的 Ease 枚举、SetEase 重载(Ease / 振幅+周期 / AnimationCurve / EaseFunction)、Flash 系列、Elastic/Back 超调 |
| LIFETIME.md | SetAutoKill / SetLink / SetRecyclable / SetId / SetTarget / DOTween.Kill / DOTween.KillAll、安全模式、补间池容量 |
| INTEGRATION.md | DOTween + UniTask(ToUniTask)、DOTween + Coroutine(WaitForCompletion)、DOTween + Addressables 生命周期、DOTween + Netcode 确定性回放 |
| PITFALLS.md | 30 个具体的幻觉 / 运行时陷阱(目标缺失、补间句柄过期、无限循环时 OnComplete 不触发、安全模式掩盖错误等) |
路由到其他模块
- 异步集成(
ToUniTask、AsyncWaitForCompletion)→ 加载 unitask-design 和 async - UI 动画(uGUI / UIToolkit)在 DOTween 与原生动画器之间的选择 → 加载 inspector
- 以补间为主的场景的架构 / 性能审查 → 加载 performance
- DOTween 使用方的 Asmdef 布局(
DOTween.asmdef、DOTween Modules asmdef)→ 加载 asmdef - Addressables 加载的预制体补间生命周期(资源包卸载与补间仍在运行)→ 加载 addressables-design
版本范围
目标版本为 DOTween 1.3.015(打包在 _DOTween.Assembly/ 中的 Pro/Free 源码)。版本通过 DOTween.cs:38 处的常量 DOTween.Version = "1.3.015" 暴露。
较早的 1.2.x 版本对大多数 API 都保持源码兼容。主要差异:
- 模块系统(UI / TMP / Physics 等)需要 1.2.0 之后的源码和 Utility Panel 扫描器。
SetLink在 1.2.x 系列中加入;LinkBehaviour.KillOnDestroy与KillOnDisable变体出现在之后的 1.2/1.3 版本中。TweenCancelBehaviour(UniTask 桥接)通过 UniTask 包单独发布。
如有疑问,请阅读引用的源码,而非依赖记忆。
评论
支持 Markdown