React Native/Expo プロジェクトで、Skia 上にスプライトシートを高速に描画できるコンポーネントと、Expo FileSystem への保存ユーティリティを提供するライブラリを作りました。
- リポジトリ: https://github.com/batako/react-native-skia-sprite-animator
- npm:
react-native-skia-sprite-animator
UI は同梱せず「再生」「保存」の最小限に特化しているため、各アプリのデザインやエディタ UI に柔軟に組み込めます。
特長
- Skia Canvas での高速スプライト再生(
SpriteAnimator) - フレームごとの
duration(ミリ秒)やfps/loop/onEndをサポート - Expo FileSystem ベースの保存ユーティリティ(
spriteStorage) - TypeScript/ESM 出力、React 19 & RN >= 0.81 対応
- Jest で主要挙動を自動テスト、CI(GitHub Actions)連携
インストール
| |
対応バージョン:
- React Native >= 0.81(Expo SDK 52 相当)
- React 19
- @shopify/react-native-skia >= 2.3
クイックスタート(再生)
64×64 のフレームが横に 7 コマ並んだスプライトシートを再生する例です。
| |
durationを各フレームに指定すると、そのフレームだけミリ秒指定で再生できます(例:{duration: 80})。- ライブラリ内部では Skia
Groupのクリッピングと画像の平行移動で切り出しを行うため、任意のスプライトシートに対応します。
画像+JSON の保存(spriteStorage)
アプリ内で生成したフレームやメタデータを保存・読み込みするユーティリティです。保存先:
.../sprites/images/(PNG 等).../sprites/meta/(JSON).../sprites/registry.json(一覧)
| |
API 概要
Props:
image:require()/バンドルアセット/SkImagedata:{ frames: {x,y,w,h,duration?}[] }fps?: number(duration未指定フレームのデフォルト速度)loop?: boolean(false で最終フレームで停止+onEnd一回)autoplay?: boolean(デフォルト true)spriteScale?: number(描画倍率)style?: Canvas サイズ指定onEnd?: () => void
spriteStorage
saveSprite({ imageTempUri, sprite })→ 画像をimages/にコピーし JSON をmeta/に保存。registry.jsonを更新。loadSprite(id)→ JSON を読み込み(存在しなければnull)。listSprites()→registry.jsonから一覧を取得。deleteSprite(id)→ 画像と JSON を削除しレジストリを更新。configureSpriteStorage({ rootDir? })→ 保存ルートを変更(標準はdocumentDirectory/sprites/)。getSpriteStoragePaths()→ 各ディレクトリ/ファイルの実パスを返す。clearSpriteStorage()→ 保存ツリーを丸ごと削除(テスト用)。
よくある質問(トラブルシューティング)
「Invalid hook call」が出る 本パッケージは ESM 出力かつ React を外部参照しています。npm から導入する限り React の二重取り込みは起きません。もし Git 参照やローカルリンクで使う場合、
node_modules/react-native-skia-sprite-animator/node_modules/reactが存在しないか確認してください(通常は存在しません)。Expo/Skia のバージョン要件は? React Native >= 0.81、React 19、@shopify/react-native-skia >= 2.3、Expo SDK 52 相当で動作確認済み。
速度が足りない/コマ落ちする Sprite シートの画像解像度を抑える、Canvas サイズと
spriteScaleを用途に合わせて調整、フレーム数を適正化するなどを試してください。
フレーム自動生成 Tips
規則的な分割であればフレーム配列は簡単に生成できます。
| |
ライセンス / クレジット
- License: MIT
- Author: batako (https://batako.net)
- Contributors: Batako Studio (https://github.com/BatakoStudio)
リンク
- GitHub: https://github.com/batako/react-native-skia-sprite-animator
- npm: https://www.npmjs.com/package/react-native-skia-sprite-animator
使い方や API で不明点があれば Issue/PR お待ちしています。