LoginSignup
18
3

More than 3 years have passed since last update.

Timelineをもう一度

Last updated at Posted at 2019-12-07

Flashがとうとう検索からも除外されるということで、
AnimateCC(旧Flash)の活用方法を考えてみました。

今回のレシピ

  • PixiJS(v5) & Animate CC & Nuxt.js
  • Lottie & Animate CC & Nuxt.js

PixiJS(v5) & Animate CC & Nuxt.js

1つ目はAnimate CCからタイムラインアニメーションをスプライトシートとして書き出し・利用する方法です。
Animate CCから最適化されたスプライトシートとjsonファイル、Canvasに描画するのにPixiJS(v5)をつかうと、
スプライトの座標を気にすることもなく実装できます。

素材編

  • AnimateCCで素材を用意します。

1.stageにmcという名前をつけたMovieClipに配置。
image.png

2.タイムラインアニメーションを作成します。
screencast 2019-11-26 15-14-27.gif

3.スプライトシートとして書き出す。
インスタンスを選択して、右クリックから「スプライトシートを作成」を選択すると
スプライトシートを作成のダイアログがでますので、任意の場所に書き出します。
image.png
今回はNuxt.jsを使うので/assets/下に書き出します。
jsonファイルと.pngが書き出されます。(今回はファイル名mc.jsonとしています。)

ソースコード編

PixiWp.vue
<template>
  <div>
    <canvas ref="mycanvas" width="600" height="600"></canvas>
  </div>
</template>

<script>
import * as PIXI from 'pixi.js'
export default {
  props:{
    option:Object,
    sprite:String
  },
  mounted() {
    const canvas = this.$refs.mycanvas;
    const app = new PIXI.Application({
      width : canvas.offsetWidth,
      height : canvas.offsetHeight,
      view : canvas,
      antialias : false,
      transparent : true
    });
    const container = new PIXI.Container();
    app.stage.addChild(container);
    const baseTexture = PIXI.BaseTexture.from(this.sprite);
    const spritesheet = new PIXI.Spritesheet(baseTexture, this.option);
    spritesheet.parse(() => {
      const textures = Object.keys(spritesheet.textures).map((t) => spritesheet.textures[t]);
      const animatedSprite = new PIXI.AnimatedSprite(textures);
      animatedSprite.play();
      app.stage.addChild(animatedSprite);
    })
  }
}
</script>

Pages側

index.vue
<template>
  <div class="container">
    <PixiWp :option="pixiData" :sprite="pixiImg" />
  </div>
</template>
<script>
import PixiWp from '~/components/PixiWp'
//Pixjs用
import pixiData from '~/assets/mc.json';//AnimateCCから書き出したjsonファイル
import pixiImg from '~/assets/mc.png';//AnimateCCから書き出したスプライトシート
export default {
  components: {
    PixiWp
  },
  data(){
    return {
      pixiData :pixiData,
      pixiImg :pixiImg
    }
  }
}
</script>


めっちゃ簡単に作成できました。🎉
※ループが変な瞬間があるのはQiitaに乗せるためにgif化したためです。

Lottie & Animate CC

つぎはLottieを使いAnimate CCからタイムラインアニメーションをjsonとして書き出して、
SVGでタイムラインアニメーションを作成する方法です。

Lottieとは

Adobe After Effectsのから書き出したjsonファイルをもとに、簡単にSVGアニメーションを使用できるようにするライブラリです。After Effectsから書き出す利用する方法はいろんな方がブログやQiitaなどに紹介されていますので割愛します。
今回はAnimate CCから書き出してみます。LottieをAnimateCCから書き出すためにAnimate-Lottie-Pluginを使います。

Animate-Lottie-Pluginを有効にする手順

  1. ExtensionManagerをインストール
    https://install.anastasiy.com/
  2. Lottie Pluginをダウンロード
    https://github.com/Jaswant99/Animate-Lottie-Plugin/tree/master/Lottie
  3. ExtensionManager を使って Lottie Plugin ZXP をインストール
  4. Animate CCを起動しカスタムプラットフォームからLottie(Beta)プラットフォームを選択

AnimateCC素材編

1.stage直下にタイムラインアニメーションを作成する。
AfterEffectのLottieを使うときと同じように作成。
screencast 2019-12-03 12-06-20.gif
作成のポイントは下記
 * シェイプレイヤーであること
 * MovieClipやグラフィックシンボルはつかわない
 * ステージ直下に配置する
 * トゥイーンはシェイプトゥイーンのみ

2.パブリッシュする
ファイルメニューやショートカットからパブリッシュすると
jsonファイルが書き出されます。素材の準備は以上です。

ソースコード編

Page側

index.vue

<template>
  <div class="container">
    <LottieWp :option="lottieData" />
  </div>
</template>

<script>
import LottieWp from '~/components/LottieWp'
import lottieData from '~/assets/lottiedata.json';//Animate-Lottieから書き出したjsonファイル
export default {
  components: {
    LottieWp
  },
  data(){
    return {
      lottieData :lottieData
    }
  }
}
</script>

コンポーネント側

LottieWp.vue

<template>
  <div>
    <div ref="animationConatainer" class="svgWp" />
  </div>
</template>

<script>
import lottie from 'lottie-web'
export default {
  data(){
    return{
      lottiePlayer:null
    }
  },
  props:{
    option:Object
  },
  mounted() {
    const animationContainer = this.$refs.animationConatainer
    this.lottiePlayer = lottie.loadAnimation({
      container: animationContainer,
      renderer:"svg",
      loop:true,
      autopla:false,
      animationData:this.option
    })
  },
}
</script>

書き出し結果はこちらです。
screencast2.gif

一見うまくいっているように思えましたが、
よくみると顔が壊れてしまいました。😭
image.png

左:AnimateCCからパプリッシュしたもの
右:タイムライン上のもの

Animate-Lottie-Pluginからのjson書き出しでは
svgが崩れてしまうことがあるようです、
その他にも解析できないタイムライン構成の場合Animate CCが落ちてしまうこともありました。

Animate CCからのLottie書き出しは今後のアップデートに期待し
おとなしくAfterEffectsで作成したほうがよさそうです。

最後に

ありがとうFlash。👍


:christmas_tree: FORK Advent Calendar 2019
:arrow_left: 7日目 前の日の記事のタイトル @izanari
:arrow_right: 9日目 Vuetifyのdatepickerを使って【和暦】+【年度/月】pickerを作ってみた @BigFly

18
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
3