跳至主要内容

DoTweenAnim

重要 注意 提醒

Coding Style wiki


DoTweenAnimTweenSystem補間動畫組件 (基於 DoTween Pro),透過 Inspector 啟用並配置補間軌道 (Position、Rotation、Scale、Size、Alpha、Color),各軌道支持 Normal、Reverse、PingPong、Sequence 播放模式,可依 DriveMode 選擇激活自動播放 (Active)事件驅動播放 (Event),並支持編輯器預覽 (Preview Mode);透過 Add Component/OxGKit/TweenSystem/DoTweenAnim 添加 (同一物件僅能掛載一個)。

命名空間OxGKit.TweenSystem
類型public class DoTweenAnim : MonoBehaviour
原始碼DoTweenAnim.cs
using OxGKit.TweenSystem;

注意 結束回調型別為 DoTween 的 TweenCallback (DG.Tweening),使用回調時需搭配 using DG.Tweening;

快速上手

using DG.Tweening;
using OxGKit.TweenSystem;

// 1. Add Component/OxGKit/TweenSystem/DoTweenAnim
// 2. 於 Inspector 啟用補間軌道 (tPositionOn、tScaleOn...)
// 並配置起訖值、duration、easeMode、playMode

// DriveMode.Active:GameObject 激活時自動播放
doTweenAnim.gameObject.SetActive(true);

// DriveMode.Event:由代碼 (或 DoTweenAnimEvent) 驅動播放
doTweenAnim.PlayTween(true); // 正向播放
doTweenAnim.PlayTween(false, () => Debug.Log("Play ended")); // 反向播放 + 結束回調

通用規則

補間軌道

啟用軌道開關後,Inspector 會顯示對應的軌道配置 (TweenValues);需要組件的軌道會於初始時自動查找同物件上的組件,查找不到則該軌道不會播放:

開關軌道 (類型)補間目標 (DoTween)需求組件 (自動查找)
tPositionOntPosition (TweenPosition)位置 (DOLocalMove)Transform
tRotationOntRotation (TweenRotation)旋轉 (DOLocalRotate / DOLocalRotateQuaternion)Transform
tScaleOntScale (TweenScale)縮放 (DOScale)Transform
tSizeOntSize (TweenSize)尺寸 (DOSizeDelta)RectTransform
tAlphaOntAlpha (TweenAlpha)透明度 (DOFade)CanvasGroup
tImgColorOntImgColor (TweenImgColor)顏色 (DOColor)Image
tSprColorOntSprColor (TweenSprColor)顏色 (DOColor)SpriteRenderer

播放模式 (PlayMode)

public enum PlayMode
{
Normal, // 正向播放 (from -> to)
Reverse, // 反向播放 (to -> from)
PingPong, // 來回播放 (from -> to -> from)
Sequence // 序列播放 (依序列點位清單)
}

注意 Sequence 模式下起訖值 (from / to、begin / end) 不生效,改用軌道的序列點位清單配置 (posSeqangleSeqscaleSeqsizeSeqalphaSeqcolorSeq)。

驅動模式 (DriveMode)

public enum DriveMode
{
Active, // 激活自動播放 (SetActive 驅動)
Event // 事件驅動播放 (DoTweenAnimEvent 或代碼)
}
  • ActiveOnEnable自動重置並播放OnDisable 時重置回原始值;循環 (loopTimes / loopType) 與間隔重播 (isInterval / intervalTime) 於此模式生效。
  • Event:等待外部呼叫 PlayTween (通常由 DoTweenAnimEvent 群組驅動),依 trigger 決定正反向且單次播放 (不套用循環設定);Inspector 的 Auto Active 選項開啟時,Awake 會自動 SetActive(false) 隱藏物件,且反向播放 (trigger = false) 結束後也會自動關閉物件。

重要 同一個 DoTweenAnim 請只擇一驅動方式:Active 模式會於每次激活時自動重播,請勿再同時透過 DoTweenAnimEvent 驅動它。

時間縮放 (Ignore Time Scale)

Inspector 的 Ignore Time Scale 選項 (預設 true) 會套用至所有軌道:補間不受 Time.timeScale 影響 (暫停選單中依然播放);間隔重播的計時亦依此選項採用 unscaledDeltaTimedeltaTime

編輯器預覽 (Preview Mode)

  • Inspector 下方的 Editor 區塊提供預覽播放Active 模式為 Play 按鈕與 Progress 進度滑桿;Event 模式為 Play Trigger (true / false) 交替按鈕;Stop 按鈕停止預覽並還原原始值。
  • Is Sync Begin Value 選項開啟後,修改軌道配置會自動同步起始值至物件上 (OnValidate)。
  • 預覽期間 (isPreviewMode) 補間配置會被鎖定,且循環次數強制為 0 (單次播放)。
  • Play Mode 期間無法於場景中編輯,僅支持於 Prefab Isolation 模式下編輯。
  • 預覽示意圖參考模塊介紹

成員

成員說明
public DriveMode driveMode驅動模式 (預設 Active),Inspector: Drive Mode (詳見驅動模式)。
public bool tPositionOn ... public bool tSprColorOn七個軌道開關 (預設皆為 false),詳見補間軌道
public TweenPosition tPosition ... public TweenSprColor tSprColor七個軌道配置的唯讀存取器 (可於運行時讀取 seqduration 等)。
public static bool isPreviewMode(UNITY_EDITOR) 當前是否處於編輯器預覽模式。

軌道通用配置 (TweenBase)

所有軌道皆繼承 TweenBase 的通用配置:

[Serializable]
public class TweenBase
{
public bool isInterval; // 間隔重播開關 (僅 DriveMode.Active 生效)
public float intervalTime; // 間隔時間 (isInterval = true 時顯示)
public int loopTimes; // 循環次數,-1 = 無限循環 (isInterval = false 時顯示)
public LoopType loopType; // 循環類型 (預設 Restart)
public PlayMode playMode; // 播放模式 (預設 Normal)
public Ease easeMode; // 緩動模式 (預設 Linear)
public float duration; // 播放時長 (預設 0.1f)
}

各軌道特有配置:

軌道特有配置
TweenPositionrelative (基於自身位置做相對位移)、from / to (Vector3)、posSeq (List<Vector3>)
TweenRotationrotateMode (預設 FastBeyond360)、beginAngle / endAngle (Vector3)、angleSeq (List<Vector3>)
TweenScalebeginScale / endScale (Vector3)、scaleSeq (List<Vector3>)
TweenSizebeginSize / endSize (Vector2)、sizeSeq (List<Vector2>)
TweenAlphabeginAlpha / endAlpha (float, 0 ~ 1)、alphaSeq (List<float>)
TweenImgColorbeginColor / endColor (Color)、colorSeq (List<Color>)
TweenSprColorbeginColor / endColor (Color)、colorSeq (List<Color>)

方法

方法總覽

方法說明
PlayTween(事件驅動) 播放所有已啟用軌道,trigger 控制正反向。
InitTweens初始所有已啟用軌道 (綁定組件並記錄原始值)。
ResetTweensKill 所有補間並重置回原始值。
GetMaxDurationTween取得時長最大的軌道。

PlayTween

public void PlayTween(bool trigger, TweenCallback endCallback = null)

(事件驅動) 播放所有已啟用軌道:自動 SetActive(true) 激活物件 → 重置軌道 → 將 endCallback (與 Auto Active) 掛載至時長最大的軌道 → 依各軌道的 playMode 播放。

  • triggertrue 正向播放;false 反向播放 (inverse)。
  • endCallback:於時長最大的軌道播放完畢時觸發。
// 正向播放
doTweenAnim.PlayTween(true);

// 反向播放 + 結束回調
doTweenAnim.PlayTween(false, () => Debug.Log("Tween ended"));

提醒 一般情況建議透過 DoTweenAnimEvent 進行群組播放與回調管理,而非直接呼叫本方法。

InitTweens

public void InitTweens()

初始所有已啟用軌道:綁定同物件上的組件 (Transform / RectTransform / CanvasGroup / Image / SpriteRenderer) 並依 playMode 記錄原始值 (Awake 會自動呼叫;運行時動態修改軌道配置後,可手動呼叫重新初始)。

ResetTweens

public void ResetTweens()

Kill 所有軌道的補間序列並將數值重置回原始值 (OnDisable (Active 模式) 與 OnDestroy 會自動呼叫)。

GetMaxDurationTween

public TweenBase GetMaxDurationTween()

從已啟用軌道中取得 duration 最大的軌道 (TweenBase);無任何啟用軌道時回傳 null

注意 DoTweenAnimEvent 播放時會呼叫此方法計算群組等待時長,因此清單中的 DoTweenAnim 至少需啟用一個補間軌道,否則會發生 NullReferenceException