今天這篇同時有設計師@Akane_Lee 和工程師同學的現身說法,在動效流行的今天,想制作一個酷炫的動畫效果,該如何與工程師溝通才能好好合作不動手呢?直接讓工程師本人來親自告訴你。
在講怎麼和 RD 配合制作 UI Animation 前,先來看 Rplus Chen 推薦的這篇勸世文 Stop Gratuitous UI Animation ,這篇文在呼吁大家不要為了炫而炫,少用莫名奇妙的動態特效。
(本文為個人筆記,我都用 Hype3 直接產出 Prototype 和 JS,避開和一堆數值的大混戰,但該知道「為什麼要這樣做」的部份還是要懂。)
如果設計師要產出動態特效給 RD ,他們需要幾種信息。感謝邱政憲、Cateyes Lin 、謝孟哲的分享,綜合三位說法整理出下列 6 點:
起始狀態、結束狀態
變化屬性(寬度、高度、XY 坐標、XYZ 軸旋轉角度、透明度、顏色…)
時間腳本(多少 ms 到多少 ms 做哪個屬性變化)
漸變函式(Ex. ease-in)
操作行為(停止並改為根據使用者操作、忽略、其他)
參考范例
1. 起始狀態、結束狀態
動態效果開始和結束時的狀態。也就是動畫開始前、跑完動畫後,畫面會長什麼樣子。
2. 變化屬性
有寫過標示文件的設計師都知道,一個組件需標出它的尺寸、距離、色碼、透明度等,如果是文字還要加上字體字級行高之類。在動畫的領域除了 X 軸和 Y 軸外,在 3D 空間裡要再加上 Z 軸。
所有需要制作動態效果的組件通通要標出這些數值,注意是數值,不是一個「感覺」,RD 寫程序不能靠感覺。
百度搜索用戶體驗中心的 H5 實現酷炫水滴效果 文中對於「水滴」有非常可怕 + 凶惡的數值示范(抖)。
天馬行空般的設計甩到面前,含著淚也要做出來——百度前端工程師的內心獨白
設計師很爽地把想象中的動態效果扔給 RD ,RD 要經過這麼復雜的計算才有辦法實現。如果有專門處理動畫的職務就算了,這是他的工作,但往往沒有這麼美夢,RD 光是解 Bug 都沒時間了,哪有這麼多心力處理錦上添花的部份呢?)
3. 時間腳本
在什麼時間點、某個組件的屬性變化。同樣是關鍵影格的概念,配合「變化屬性」,從 A 時間點到 B 時間點之間,某組件的數值有什麼變化。
若各組件變化時間不同,就會有很多不同的「時間經過」搭配「屬性變化」要處理。
4. 漸變函式
可以用「動作的加減速」來理解。根據迪斯尼 12 項動畫原則,第 6 條是漸快與漸慢(Slow in and slow out),Material Design 有一整個章節在說明曲線的必要性,並附上許多動畫范例說明。當然這對設計師來講很有難度。
Easing 函數速查表 可以參考這個網址,和 RD 共同討論組件動作的路徑。
5. 操作行為
「觸發條件」,使用者的操作是否會影響動畫?游戲類特別會注意到這個部分。
6. 參考范例
展示動畫、模擬影片、Prototype 之類,對設計師來說不算太大的困難,難的絕對是上方提的這 5 項數值怎麼標。這些屬性狀態數值沒寫清楚就要靠 RD 通靈了。
RD 現身說法
感謝 謝孟哲 在 FB 公開分享他的實作經驗,已征得同意轉錄。看完這篇文後,就會知道為什麼 RD 會練滿通靈 Lv.99了。
全文如下:
其實動畫會有分兩種:
一般的2D動畫(平移、旋轉、透明…)
特殊或3D動畫(翻頁、mac的丟到垃圾桶…)
後者大概都只能用口頭或是影片溝通,而且開發成本很高。我遇過的情況是:有一個專業的設計 team,一個專業的特效函式庫 team,再加上完成一切作業的軟件研發 team。
前者就比較有一定的規則可循,因為 engineer在開發時,系統已經提供了相關的操作方式,只要給些相關的參數即可:
動畫對象的參數變化(如坐標、透明度、旋轉角度)
動畫持續的時間
動畫加減速的曲線,f(x)=y 表示在時間點 x 的時候對象參數為 y。
這就是上面其他人所提到的。
前兩點是很簡單能量化的,但是光是動畫持續時間就能看出這個 team 在 ux 上的 sense:使用者覺得幾秒的動畫能被接受?動畫播放時是否能被中斷或者改變狀態(左滑到一半可以停止,或變成右滑)?或者,這個動畫是否是需要的?
我遇過新手 designer 或是 engineer 最常做的事情就是把動畫時間定義為 0.6 到 1sec,如果沒有特別的設計我通常會說「太長」而要求改為 0.3 到 0.5sec…這邊扯比較遠,點到為止就好了。
第三點那個方程式就好玩了。這個部分 designer 根本不知道該怎麼描述,即使是 engineer,在這個素質落差那麼大的年代,也不是人人都能寫出那個 f(x)=y 的方程式。不過現在還是有些好用的工具可以用,如這種網頁:
http://matthewlein.com/ceaser/
你可以拉動方塊改變那個曲線,然後按那些按鈕看到實時的效果。
當然,如同上面其他人所言,這個方程式是有現成的可以套用,比如說漸減( web engineer 喜歡說 ease-out,android 上會說 DecelerateInterpolator,由於各平台用詞不同,除非是只跟特定某個平台的 engineer 溝通,否則溝通上我覺得還是用通俗的語言「漸減」來描述比較好。至少 PM 看得懂)。一般而言能有這樣的描述就不錯了,不過若要求更高的質量,就會需要更精確的描述。漸減這種詞就跟黃色一樣,是種很不精確的概念,黃色再精確一點可能會說鵝黃或香蕉黃,但是要十分精確一定是用色碼來描述,否則你的香蕉黃跟我的香蕉黃可能會不同。漸減也是一樣,ease-out 跟 DecelerateInterpolator 是否相同呢?有興趣的可以研究一下,最精確的描述則一定是數學方程式。
在開發某個要求很高的手機 app 項目時,我是直接仿造上面網頁的概念,在手機上面做了一個長得很像的 app 來跟 designer 溝通。他們手指拉一拉,方程式會用到的參數就出來了,也能直接在手機上看到效果。