Adobe After Effects + Lottie (Bodymovin) でモーションをつける

アイコンをクリックした時にちょっとしたモーションが入っていることによって、使っているデジタルツールに親近感を持つことはないですか?

twitter like button animation
ちょっとほっこり💗

今回は、複雑な計算式なしに、Adobe After Effects を使って描画したモーションを、Lottie (Bodymovin) を使って簡単に実装できる方法を紹介します。

1)Lottieとは

Lottie は、Airbnbから登場したWeb、iOS、Android、React Native、Windows 対応のモバイルライブラリです。Adobe After Effectsで表示できるアニメーションをリアルタイムでレンダリングし、簡単に複雑な動きをするアニメーションを作成することができます。Lottieは、Bodymovinというオープンソースライブラリを使い、After Effects で作ったSVGアニメーションデータを拡張機能よりJSONファイルとして書き出します。

JPG や PNG ファイルは使わず、SVG で書き出されるので、軽量でサイズ可変でとても便利です。

詳しくはコチラ:Airbnbがリリースしたアニメーションライブラリ「Loitte」とは?

2)インストール方法

Lottie の公式ページでは、6通りのインストール方法が紹介されています。私は、After Effects バージョン CC を使っているので、Option 2 の Adobe Store から Bodymovin プラグインをインストールしました。インストール後は、Adobe Effects のソフトを立ち上げて、以下のダイアログ内の “Allow Scripts to Write Files and Access Network” にチェックします。

  • Windows: Edit > Preferences > General > “Allow Scripts to Write Files and Access Network” にチェック
  • Mac: Adobe After Effects > Preferences > General > “Allow Scripts to Write Files and Access Network” にチェック
Adobe After Effect 設定画面

3)Bodymovin で JSONファイルを書き出す

adobe after effect アニメーション
Adobe After Effects でアニメーションを制作
Windows > Extensions > Bodymovin を選択
Jsonファイル書き出し
json ファイルの書き出し
完了:data.json が書き出されます

4)HTML, CSS, JavaScript を使ってウェブ上で動かす

ファイルを作成

HTMLファイルに以下を設定

  1. アニメーションを表示させる部分として <div id=”star”></div> を書く
  2. bodymovin プラグインをCDNで呼び出す
  3. index.js を呼びだす
<body>
  <div id="star"></div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.5.3/lottie.min.js"></script>
  <script src="js/index.js"></script>
</body>

index.js ファイルに以下を設定

  1. bodymovin で data.json を読み込み、アニメーションを制御する
  2. クリックしたらアニメーションを制御するコード
var animation = bodymovin.loadAnimation({
  container: document.getElementById('star'),
  renderer: 'svg',
  loop: false,
  autoplay: false,
  path: 'data.json'
});

container : SVG アニメーション用に作った箱 (id名) を指定
render : ‘svg’ / ‘canvas’ / ‘html’ の中から選択
loop : animation を連続で再生するかどうか指定
autoplay : animation を自動で再生するかどうか指定
path : After Effects から書き出した JSON のパスを記載

const element = document.getElementById('star');

element.addEventListener('click', function(){
  if(element.classList.contains('clicked')){
    animation.playSegments([0,1], true);
    element.classList.remove('clicked');
  }else{
    animation.playSegments([0,30], true);
    element.classList.add('clicked');
  }
 });

const element = document.getElementById('star'); id名star の部分を呼びだして element という箱に入れる
element.addEventListener('click', function() 上記がクリックされたら以下を実行
if(element.classList.contains('clicked')) element のクラス名に clicked があったら、
animation.playSegments([0,1], true); Adobe After Effects で描いたアニメーションのフレーム 0 から 1 を実行
element.classList.remove('clicked'); クラス名 clicked を削除
}else{ element のクラス名に clicked がなかったら、
animation.playSegments([0,30], true); Adobe After Effects で描いたアニメーションのフレーム 0 から 30 を実行
element.classList.add('clicked'); クラス名 clicked を追加

style.css に背景や星の位置を設定

html, body {
  background-color: #f3f3f3;
  width: 100%;
  height:100%;
  margin: 0;
  overflow: hidden;
}
body {
  display: grid;
  justify-content: center;
}
#star {
  width: 250px;
  cursor: pointer;
}

以上、とても簡単に実装できます!

ファイルのダウンロードはコチラから

 

Adobe After Effects でもっと入り組んだアニメーションを作っても、様々なプラットフォーム(web, ios, android, … etc)でサクサク動きます。ページを読み込んでいる間や後に、静止しているよりもアニメーションがあった方が、ユーザーに何の処理をしたか、どれくらい待つかなど、分かりやすい場合が多く、ユーザービリティの向上に繋がると思います。

ブランディングにも欠かせない要素

参照:Lottie 公式 GitHub

You Might Also Like