After Effects 表達式入門到實戰:用 Expression 自動化動畫製作完整教學
做動態設計做久了,一定會遇到一個瓶頸:有些動畫效果用關鍵影格(keyframe)來做實在太累了。比方說,你想讓一個物件持續微微晃動、讓一段動畫無限循環、或是讓數字自動從 0 跑到 1000——這些用手 K 影格不僅慢,而且一改參數就要全部重來。
這時候 After Effects 表達式(Expression)就是你的救星。它本質上就是 JavaScript(準確說是 ExtendScript),讓你用幾行程式碼取代幾十甚至幾百個關鍵影格。今天我要從最基礎開始,帶你搞懂 AE 表達式的核心概念,然後用幾個實戰範例讓你立刻能用在專案裡。
表達式是什麼?為什麼動態設計師需要學
簡單來說,表達式就是寫在屬性(Property)上的一小段程式碼,用來自動計算該屬性在每一幀的值。你不需要設關鍵影格,AE 會在每一幀執行這段程式碼來決定數值。
為什麼值得學?
- 省時間:重複性動畫(循環、彈跳、晃動)寫一次表達式就搞定
- 好修改:改一個參數,整段動畫自動更新
- 可連動:讓 A 圖層的位置自動跟著 B 圖層的旋轉走
- 更精準:數學公式比手拉貝茲曲線精確多了
如果你之前有看過我們的After Effects Shape Layer 動畫教學,應該已經知道 Shape Layer 動畫的可能性很多——加上表達式之後,可能性會直接翻倍。
第一個表達式:wiggle 隨機晃動
打開 AE,對任何圖層按 P 展開位置屬性,按住 Alt 點擊屬性左邊的碼表圖示,就能開啟表達式編輯器。
輸入這一行:
wiggle(3, 50)這就是 AE 最經典的表達式。wiggle(頻率, 振幅),意思是每秒晃動 3 次,最大偏移 50 像素。按下播放,你會看到物件像是被一隻看不見的手在搖。
想要更細膩的控制?可以這樣寫:
// 只在 X 軸晃動
temp = wiggle(3, 50);
[temp[0], value[1]]循環動畫:loopOut 和 loopIn
做了一段 0 到 1 秒的動畫,想讓它無限循環?不用複製貼上關鍵影格,一行搞定:
loopOut("cycle")常用的循環模式:
"cycle":完整循環(A→B→A→B...)"pingpong":來回循環(A→B→A→B...動畫會倒播回來)"offset":累加循環(每次循環都在前一次的基礎上繼續)"continue":按最後的速度繼續運動
我個人最常用 pingpong,做呼吸燈、浮動效果超好用。
時間相關表達式:讓數字動起來
想做一個從 0 自動跑到 100 的計數器動畫?
Math.round(time * 20)time 是 AE 內建的變數,代表當前時間(秒)。乘以 20 就是每秒增加 20。Math.round 取整數。
進階一點,想要帶有緩入緩出效果:
startVal = 0;
endVal = 1000;
dur = 3; // 3 秒完成
t = Math.min(time / dur, 1);
// ease 緩動
t = t * t * (3 - 2 * t);
Math.round(linear(t, 0, 1, startVal, endVal))連結屬性:讓圖層互相控制
表達式最強大的地方之一就是讓不同圖層的屬性互相連動。比方說,讓一個物件的不透明度跟著另一個物件的 X 位置變化:
// 寫在「不透明度」上
sourceX = thisComp.layer("Controller").transform.position[0];
linear(sourceX, 0, 1920, 0, 100)linear() 做的是線性映射:當 Controller 的 X 從 0 移到 1920 時,這個圖層的不透明度就從 0% 變到 100%。這招做互動式的 HUD 動畫特別好用。
實戰範例:自動彈跳效果(Bounce)
這是我最愛的表達式之一,可以讓任何關鍵影格動畫自帶彈跳效果:
amp = 0.06; // 振幅
freq = 3; // 頻率
decay = 5; // 衰減速度
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n > 0) {
t = time - key(n).time;
v = velocityAtTime(key(n).time - 0.001);
value + v * amp * Math.sin(freq * 2 * Math.PI * t) / Math.exp(decay * t);
} else {
value;
}把這段貼到位置、縮放、旋轉任何一個屬性上,設好關鍵影格之後,動畫結束時就會自動帶彈跳效果。比手動調貝茲曲線精準太多了。
表達式控制器:給非工程師的操作面板
如果你的專案要交給其他人用(或是未來的自己),建議把參數抽出來放到「表達式控制器」:
- 新增一個 Null 圖層叫「Controls」
- 在上面加入效果 → 表達式控制 → 滑桿控制(Slider Control)
- 在表達式中用
thisComp.layer("Controls").effect("Speed")("Slider")引用
這樣別人只需要調滑桿就好,完全不用碰程式碼。
常見錯誤與除錯技巧
表達式無效(Expression disabled)
最常見的原因是語法錯誤。AE 會在 timeline 上用紅色標示出錯的屬性。點開表達式,檢查:拼字、分號、括號是否配對。
維度不匹配
位置是二維(或三維)陣列,不透明度是單一數值。你不能直接把一個陣列指定給單值屬性,需要用 [0] 或 [1] 取出特定維度。
效能問題
表達式會在每一幀執行,太複雜的運算會拖慢預覽速度。如果發現 RAM Preview 變慢,考慮簡化表達式或預先計算。
如果你對 AE 的其他進階功能有興趣,像是AI 去背技術或轉場特效設計,都可以搭配表達式做出更有創意的效果。
小結
After Effects 表達式是動態設計師的效率倍增器。從最簡單的 wiggle 開始,慢慢學會 loopOut、linear、彈跳表達式,你會發現之前花大量時間手動 K 的動畫,現在幾行程式碼就能搞定。
我的建議是:不需要一次學完所有表達式,先把 wiggle 跟 loopOut 用熟,這兩個就能覆蓋你日常 80% 的需求。然後遇到新的挑戰再查、再學,這樣最有效率。
繼續閱讀
After Effects Shape Layer 動畫教學:用形狀圖層打造專業 MG 動態設計
想做出那種流暢又有質感的 Motion Graphics 動畫嗎?Shape Layer 是 After Effects 裡最強大也最被低估的功能之一。這篇教學帶你從零開始,用形狀圖層打造專業級的 MG 動態設計。
相關文章
After Effects Shape Layer 動畫教學:用形狀圖層打造專業 MG 動態設計
想做出那種流暢又有質感的 Motion Graphics 動畫嗎?Shape Layer 是 After Effects 裡最強大也最被低估的功能之一。這篇教學帶你從零開始,用形狀圖層打造專業級的 MG 動態設計。
After Effects 轉場特效完整教學:10 種專業影片過渡動畫效果製作指南
完整解析 After Effects 10 種專業轉場特效製作方式,從基礎漸隱到進階遮罩轉場,掌握影片過渡動畫的核心技巧。
你可能也喜歡
探索其他領域的精選好文