公司想製作猴子上樹的小遊戲,起因是原本專案有用到 Lottie 動畫,覺得動畫流暢度及體驗感很好,就深入研究了一下,如何用 Adobe After Effect 製作 Lottie 小遊戲動畫,並與 Vue 前端框架做互動。
我們可以透過 lottiefiles.com 下載免費的lottie 動畫 json 檔。
回到 Adobe After effect ,點選 Window > Extensions > Bodymovin
點選 Import Lottie Anmimation >
匯入剛剛的下載的lottie 的動畫 json 檔
匯入成功的畫面
匯入的動畫會顯示在素材庫裡
點選輸入 horizontal type tool > 輸入文字 > “test”
對 text layer > 右鍵 > rename
但這邊要非常注意,因為後面要透過 Javascript 控制,因此要透過 ”#” 當特殊後缀命名,#字之後字元會轉換成 id。 emample: test#rate
最後輸出在網頁的時候,會將 id 挷在所屬的 DOM 上
開啟Bodymovin, Window > Extensions > Bodymovin ,並依據下圖操作
★★★★★要特別注意 ★★★★★
在輸出成 Lottie 動畫檔,一定要勾選掉 Glyphs ,移掉原有的字型,不然會一直匯出錯誤( Character could not be created ),也不會將文字輸出成 html。
撰寫 Example.vue <template> <div> <div class="flex"> <div ref="monkey" /> </div> </div> </template> <script> import loApi from 'lottie-api' import lottie from 'lottie-web' import { numberFormat } from '@/utils' export default { components: { }, data() { return { lottieAnimation: null } }, created() { }, mounted() { this.lottieAnimation = this.loadLottieAnimation() let count = 1 const that = this // 每兩秒去修改 rate 裡面的值 setInterval(() => { count = count + 0.01 var api = loApi.createAnimationApi(that.lottieAnimation) var elements = api.getKeyPath('test#rate').getElements() // 查找對象 var ele = elements[0] const result = '' + numberFormat(count, 2) // 修改改傳入的值必須是字元串不能是數字,否則會失敗 ele.setText(result) }, 2000) }, methods: { loadLottieAnimation() { return lottie.loadAnimation({ container: this.$refs.monkey, // 掛在到對應的 DOM 節點 loop: true, animationData: require('@/assets/lottie/monkey.json'), autoplay: true }) } } } </script>
Adobe After Effect 本身可透過 Lottie Api 達到前端和動畫做互動,對於撰寫小遊戲真的相當的方便,提供相當多事件及屬性可以調整,像是速度、播放次數、重覆播放,播放完成執行事件等等。