Riveで作ったアニメーションをスマホアプリで操作してみる

アプリ

前回Riveを使って描いた絵をアニメーション化しました

今回はそれをスマホアプリで動かしたいと思います

前回やったこと

svg画像をRiveで動かせるようにしました

今回やったこと

Riveの設定

3つのアニメーションを作りました

葉っぱアニメーション

葉っぱが動くアニメーションです

くち

口がパクパク動くアニメーションです

ほっぺ

ほっぺが回っています。このアニメーションはループを設定しています

Riveファイルのダウンロード

RIveのメニューバーからDownload -> For newest Runtime(v7)を押してapple.rivをダウンロードします

Flutterでコーディングする

assets/apple.riv

assetsディレクトリを作り、ダウンロードしたapple.rivを配置します

pubspect.yaml

assetsを読み込めるように設定を書きます

flutter:
  assets:
    - apple.riv
main.dart

OneShotAnimationクラスを使って口と葉っぱを動かすアニメーションを設定します

RiveAnimation.assetでローカルのファイルからriveファイルを読み込み、

ほっぺを動かすアニメーションを起動時に実行しています

アニメーションの名前はRiveで設定した「くち」、「葉っぱアニメーション」、「ほっぺ」を指定しています

import 'package:flutter/material.dart';
import 'package:rive/rive.dart';

void main() {
  runApp(MaterialApp(home: PlayOneShotAnimation()));
}

class PlayOneShotAnimation extends StatefulWidget {
  @override
  _PlayOneShotAnimationState createState() => _PlayOneShotAnimationState();
}

class _PlayOneShotAnimationState extends State<PlayOneShotAnimation> {
  RiveAnimationController _mouseController;
  RiveAnimationController _leafController;
  bool _isPlayingMouse = false;
  bool _isPlayingLeaf = false;

  @override
  void initState() {
    super.initState();
    _mouseController = OneShotAnimation(
      'くち',
      autoplay: false,
      onStop: () => setState(() => _isPlayingMouse = false),
      onStart: () => setState(() => _isPlayingMouse = true),
    );
    _leafController = OneShotAnimation(
      '葉っぱアニメーション',
      autoplay: false,
      onStop: () => setState(() => _isPlayingLeaf = false),
      onStart: () => setState(() => _isPlayingLeaf = true),
    );

  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('りんごを動かす'),
      ),
      body: Center(
        child: Column(
          children: [
            Container(
              width: 400,
              height: 400,
              child: RiveAnimation.asset(
                'assets/apple.riv',
                animations: const ['ほっぺ'],
                controllers: [_mouseController,_leafController],
              ),
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                ElevatedButton(
                  onPressed: () {
                    _isPlayingMouse ? null : _mouseController.isActive = true;
                  },
                  child: Text("口を動かす"),
                ),
                ElevatedButton(
                  onPressed: () {
                    _isPlayingLeaf ? null : _leafController.isActive = true;
                  },
                  child: Text("葉っぱを動かす"),
                ),
              ],
            )
          ],
        ),
      ),
    );
  }
}

実行結果

起動時にほっぺがぐるぐるまわります

「口を動かすボタン」を押すと口が動き、「葉っぱを動かすボタン」を押すと葉っぱが動きます

あとがき

flutterはコード量が少なく簡単に作れるから好きです

コメント

タイトルとURLをコピーしました