本文へスキップ

スプライトシートを.asepriteに · 分割してタグ付き保存

配布されているシートや昔のシートをAsepriteで作り直すには、1枚の大きな絵ではなくフレームとタグが必要です。PNGをここにドロップすると、Studioがグリッド(余白・間隔込み)を測るかスプライトを島ごとに見つけて切り、単色の背景を消し、行ごとにタグを作って、時間・ピボット・当たり判定をスライスとして入れた.asepriteを1つ書き出します。

PNGのスプライトシートは1枚の絵なので、フレームの境界、タイミング、アニメーション名、ピボットがありません。.asepriteを作るために、Nerulioはグリッドを測る(またはスプライトを島として見つける)、単色の背景を透明にする、行ごとにタグを1つ、1フレーム100 msで作る、という下ごしらえをします。タグ・タイミング・ピボット・当たり判定を直したら、スプライト › .aseprite書き出し…がフレーム、タグ、長さ、スライスを書き込みます。同じ書き出し処理で作った231ファイルは、すべてAseprite 1.3.18.6で警告なく開けました。

スプライトシート、連番フレーム、GIF・APNG、.asepriteファイルをドロップ
空のStudioを開く
ブラウザ内で処理し、ファイルはアップロードされません。
Studio のスプライト作業画面:48pxのサムライのシートで検出したグリッド(10アニメーション・60フレーム)を適用前にプレビュー
CC0アセット(OpenGameArt)を開いた実際のStudio画面です。
書き出し先
  • .aseprite検証済み· Aseprite 1.3.18
  • Godot 4検証済み· Godot 4.7.2
  • Unity 6検証済み· Unity 6000.5.3f1
  • Phaser 3 / 4検証済み· Phaser 3.90 + 4.2
  • PixiJS 8検証済み· PixiJS 8.21
  • Aseprite JSON検証済み· Phaser load.aseprite · PixiJS 8.21
  • Spine / libGDX検証済み· spine-canvas 4.2
  • Starling / Sparrow XML検証済み· Phaser 4.2
  • LÖVE検証済み· LÖVE 11.5
  • Defoldビルド確認· Defold bob.jar 1.13.1
  • GameMaker未検証
  • CSS sprites検証済み· Chromium
  • GIF / APNGデコード確認· Pillow

シートにあるものと、.asepriteに必要なもの

シートにあるのはピクセルだけです。セルサイズ、マージン(シート周囲の空白)、スペーシング(セル同士の隙間)は配置から推し量るしかなく、アニメーションの区切りは作者が一貫していれば行に表れます。フレームのタイミング、アニメーション名、ループ設定、ピボットはファイルのどこにもなく、ゲームのコードや作者のメモの中にあります。

.asepriteではそれらをすべて明示する必要があります。キャンバスサイズ、ミリ秒の長さを持つフレーム、from–to・方向・繰り返し回数を持つタグ、点やボックスのためのスライスです。Nerulioは測れるもの(グリッド、島、キーカラー、行ごとのタグ)を埋め、推定ごとに信頼度を示し、本当のタイミングを決めるまでは1フレーム100 ms(Asepriteの既定値)を使います。

Asepriteのタグは範囲なので、1つのタグは連続したフレームでなければなりません。Nerulioはタイムライン順に続く範囲はそのまま、逆向きに続く範囲は逆方向のタグとして書き、フレームが飛び飛びのタグは誤った範囲にねじ曲げず、名前を知らせます。

セル
グリッド内の1フレーム分の矩形。
マージン/スペーシング
シート全体の周囲の空白ピクセル/隣り合うセル間の空白ピクセル。
島(アイランド)
不透明ピクセルがまとまった塊。規則的なグリッドのないシートを切るときに使います。
スライス
Asepriteの名前付き矩形。Nerulioはピボットと矩形ボックスをそれぞれスライスとして書きます。

具体例:マージンとスペーシングのある8 × 4シート

シート        267 × 135 px、マゼンタ背景
グリッド      32 × 32 セル、マージン 2 px、スペーシング 1 px
横の検算      2 + 8 × 32 + 7 × 1 + 2 = 267 px
縦の検算      2 + 4 × 32 + 3 × 1 + 2 = 135 px
フレーム      8 × 4 = 32 → タグ row_1 … row_4、各8フレーム
タイミング    row_2 を 12 fps に: 1000 / 12 = 83.33 ms → 83 ms で記録
.aseprite     32 × 32 キャンバス、32フレーム、レイヤー1、タグ4、マゼンタ → 透明

書き出し前にタイムラインでrow_1 … row_4をidle、walk、jump、hurtのように改名してください。Asepriteはタグ名を書いたとおりに表示します。

何がどこに対応するか

シート/Studioでは.asepriteに書かれるもの知っておくこと
グリッドや島で切ったフレーム最大のフレームと同じ大きさのキャンバスに1フレームずつ各フレームは左上基準のオフセットを保持。サイズの違うフレーム同士はピボットで揃えません
連続したフレームのタグfrom、to、方向、繰り返しを持つタグ逆向きの範囲は逆方向に、ピンポンはピンポンのまま
飛び飛びのフレームのタグ書かれない書き出しメッセージに名前が出ます。フレームを並べ直して書き出し直してください
フレームの長さ整数ミリ秒、最小183.33 ms → 83 ms、触っていないフレームは100 ms
ピボットピボット点を持つpivotスライス、変わるフレームにキー全フレームが既定の下中央なら省略
矩形ボックス種類と番号ごとにスライス1つ(hit、hit2、hurt …)ボックスがなくなるフレームに空のキーを入れて持ち越さない
円・ポリゴンのボックス、コリジョンポリゴン書かれないAsepriteのスライスは矩形だけ。省いたボックスは書き出しメッセージに出ます
キーカラー透明ピクセル、RGBAカラーモード元のシートは取り消し用にStudioに残ります
レイヤーStudioのレイヤー(切ったシートなら1枚)同じレイヤーの同一セルはリンクセルとして保存

できること

  • ピクセルから測ったグリッド:セルサイズ・余白・間隔と信頼度。不規則なシートは島モードで、小さなエフェクト片は本体にくっつけ、置き場のない片は赤で表示。
  • マゼンタなどの単色背景を透明に。元の画像は保持するので元に戻せます。
  • 最初は1行1アニメーション。タイムラインでタグの名前変更・伸縮・新規作成ができ、方向(順・逆・ピンポン)と繰り返しを設定。
  • フレームごと、またはタグ全体の長さ(すべて fps で設定)、ピボット(P)、hit・hurt・interact・自由な名前の矩形ボックス(B)。
  • スプライトメニューの「.aseprite を書き出し…」で、フレーム・タグ・整数msの長さ・ピボットのスライス・ボックスごとのスライスを書き込み。

使い方

  1. スプライトシートのPNGをドロップ。
  2. グリッドか島の推定と背景色を確認し、違えば別の候補を選んで「適用」(取り消しは1回)。
  3. タイムラインでアニメーションごとにタグを作り、方向と繰り返しを設定。
  4. 必要なところに時間・ピボット・当たり判定を入れる。
  5. 「.aseprite を書き出し…」を選び、Asepriteで開く。

出力されるファイル

ファイル用途
hero.asepriteスプライト › .aseprite書き出し…:フレームごとのオフセット、Studioのレイヤー、タグ、長さ、ピボットとボックスのスライス。
hero_aseprite.zip › hero_aseprite/hero.asepriteパック&書き出し › .aseprite file:全フレームをピボットで揃えた1つのキャンバスに置き、2つのタグが共有するフレームは繰り返して各タグを1つの範囲に保ちます。検証ではAseprite 1.3.18のコマンドラインが開いて全フレームをレンダリングしました。

Asepriteで続ける

  1. Asepriteでhero.asepriteを開きます。キャンバスはシートではなくフレームのサイズ(例では32 × 32)です。
  2. フレームの上のタグを確認します。名前・範囲・方向はNerulioで決めたとおりです。書き出しメッセージで省略と出たタグは入っていないので、Nerulioでフレーム順を直して書き出し直してください。
  3. スライスツールを選ぶとpivotスライスとボックスのスライスが見えます。それぞれフレームごとのキーを保っています。
  4. アニメーションを仕上げます。エンジン用のシートが要るならFile > Export Sprite Sheetを使うか、.asepriteをNerulioに戻してGodot、Unity、Phaser向けに書き出してください。

結果の確認

  • aseprite -b hero.aseprite --list-tagsがタグ名を最初から最後まで出力します。タイムラインと比べてください。
  • Asepriteでタグを再生します。1フレーム83 msのrow_2は8 × 83 = 664 msごとにループします。
  • 市松模様の背景を表示します。マゼンタだった部分はピンクではなく透明のはずです。

.asepriteファイルに入るもの

Studioの情報.asepriteでの形補足
シートから切ったフレーム最大のフレームと同じサイズのキャンバスに1フレームずつフレームごとのオフセットを保持
タグfrom..to・方向・繰り返し付きのタグ逆向きに続く区間は逆再生として
フレームの長さフレームごとに整数ms触っていないフレームはAsepriteの既定値と同じ100ms
ピボットピボット点付きのpivotスライス全フレームが既定(下中央)のままなら書かない
矩形ボックス種類ごとのスライス(hit、hurt、hit2 …)、変化するフレームにキー円・多角形は飛ばす
レイヤーアセットのレイヤーと不透明度・ブレンドモード切り出したシートはレイヤー1枚

トラブルシューティング

症状考えられる原因確認方法対処
Asepriteにタグがないそのタグのフレームがタイムライン上で連続していません書き出しメッセージに省略したタグ名が出ますフレームを隣り合わせに並べ(共有フレームはAlt+Nで複製)、書き出し直してください
Asepriteで再生するとフレームが跳ねる・ずれるサイズの違う島として切ったフレームが、共通キャンバス上で別々のオフセットにありますフレームを送りながらフレームパネルでサイズを比べます書き出し前に整列 › アンカー指定でキャンバスサイズを統一するか、パック&書き出しのピボット揃えのファイルを使ってください。トリム後のガタつきも参照
円やポリゴンの当たり判定が消えるAsepriteのスライスは矩形だけです書き出しメッセージに省いたボックスがすべて出ます矩形(B)で描き直すか、GodotやジェネリックJSONの書き出しで保持してください
絵の周りにピンクや緑のピクセルが残るキーカラーが適用されていない(信頼度が高未満)か、絵がキーカラーの上でアンチエイリアスされていますインポートパネル:背景色の判断検出された色を適用してください。混ざった縁のピクセルは手直しが必要です。スプライト背景の除去を参照
全フレームが100 msPNGにはタイミングがないので、読み込み時は100 msから始まりますフレームパネル:長さ書き出し前にタグごとにfpsで一括設定するか、フレームごとにミリ秒を入力してください

ほかの方法

方法こんなときに向いています
AsepriteのFile > Import Sprite Sheetグリッドが規則的で、Aseprite内で作業したいとき。オフセット(x, y)、スプライトの幅・高さ、パディングを指定すると、シートの種類の順にフレームを取り込みます。タグ・タイミング・スライスは手で追加します。
パック&書き出し › .aseprite fileサイズの違う島を切ったあとなど、全フレームが最初からピボットで揃っていてほしいとき。
スプライトスライサーAseprite文書ではなく、フレームごとのPNGだけが欲しいとき。

エンジン別の書き出しと検証方法

「検証済み」は、実際のCC0アセットから書き出したファイルを本物のエンジン・ツールで読み込み、元データと比較したという意味です。読み込んでいない形式はそのように表示します。

書き出し先ファイル検証
Godot 4.tres SpriteFrames · .tscn AnimatedSprite2D · .png.import検証済み Godot 4.7.2Godotで読み込み、全アニメーションフレームを描画して元ファイルと比較。シーンはNearestフィルターで、回転は使いません。
Unity 6.unity.json · Editor/NerulioSpriteImporter.cs · AnimationClip検証済み Unity 6000.5.3f1バッチモードでスプライト範囲・ピボット・ピクセル・クリップのキーと長さを確認。
Phaser 3 / 4atlas JSON (multiatlas) · .anims.json検証済み Phaser 3.90 + 4.2両バージョンでフレームとアニメーションを描画。
PixiJS 8spritesheet JSON · animations · anchor · meta.scale検証済み PixiJS 8.21回転・複数ページのアトラスも確認。
Aseprite JSONhash / array · frameTags · slices検証済み Phaser load.aseprite · PixiJS 8.21タグの方向と繰り返し回数を保持。
.asepritelayers · tags · durations · slices検証済み Aseprite 1.3.18Asepriteのコマンドラインで開いて描画。
Spine / libGDX.atlas検証済み spine-canvas 4.2Spineランタイムで回転・トリム領域をすべて描画。libGDX本体は未実行。
Starling / Sparrow XMLXML per page検証済み Phaser 4.2Phaser 3.90はトリムされたXMLフレームを誤って描画します(Phaser側の不具合)。「Sparrow XML (Phaser 3)」プリセットはトリムを切り、3.90・4.2とも合格。
LÖVELua quads · nerulio_atlas.lua · main.lua検証済み LÖVE 11.5同梱ヘルパーで全フレームを描画し、全アニメーションを再生。
Defold.atlas · .tilesourceビルド確認 Defold bob.jar 1.13.1Defoldのコマンドラインビルダーでビルドし、生成テクスチャのUVを読み戻して確認。
GameMakerspr_<name>_stripN.png · gamemaker.json未検証GameMakerでは読み込んでいません(ヘッドレス実行不可)。ストリップはGameMakerの取り込み方式どおりに切ります。
CSS sprites.css · preview .html検証済み Chromium同梱スタイルシートで全クラスを描画。
GIF / APNGone file per animationデコード確認 Pillow書き出し後に全フレームと遅延を再デコード。APNGは完全一致。

検証の根拠

GIFデコーダー:実在のGIF 29本で408/408フレームがPillowと一致、APNG 16本で132/132。.aseprite:コーパス231ファイルを読み込み・書き直し、Aseprite 1.3.18で開いてタグ・長さ・ピクセルが231/231一致。書き出し:実在のCC0アセットで実際のエンジンを49回実行し47回合格。失敗2回はPhaser 3.90のトリムXMLの不具合で、Phaser 3プリセットで回避できます。

制限

  • 飛び飛びのタグと矩形以外のボックスは、知らせるだけで書き込みません。
  • キーカラーの上で半透明に混ざった縁のピクセルはそのまま残ります。
  • グリッド・島の推定は信頼度つきのプレビューで、「適用」を押すまで何も切りません。すべての選択に代替案があり、ワンクリックで切り替えられます。
  • レイヤーが正確に合成できない.asepriteファイル(グループの不透明度など)は統合して読み込み、理由を読み込みパネルに表示します。
  • 読み込んだアトラス内の回転フレームは回転したままで、その書き出しは未検証です。
  • 画像は一辺32,768px(2億6,800万ピクセル)まで。ブラウザのメモリにも依存します。

バージョンと出典

スプライト › .aseprite書き出し…は、実ファイル231個で確認した書き出し処理を使います。読み込んで書き直し、Aseprite 1.3.18.6で開いたところ、231個すべてが警告なしでタグ・長さ・ピクセルとも一致しました。パック&書き出しの.asepriteターゲットは、Aseprite 1.3.18のコマンドラインで開いて全フレームをレンダリングしました。上のAsepriteの手順はAsepriteの公式ドキュメントに基づきます。

参照した公式ドキュメント

よくある質問

Asepriteで問題なく開けますか?

このライターは、実際の.aseprite 231本をStudioに読み込んで書き戻す形で確認しました。本物のAseprite 1.3.18.6がすべて警告なしで開き、タグ・長さ・ピクセルも同じでした。ここで切ったシートも同じライターを通ります。

円や多角形の当たり判定はどうなりますか?

Asepriteのスライスは矩形なので、矩形のボックスだけを書きます。円と多角形は飛ばし、書き出しメッセージに名前を出します。コリジョンポリゴンはプロジェクトと、Godot・汎用JSONの書き出しに残ります。

タグの途中にフレームの抜けがあると?

Asepriteのタグはfrom..toの範囲です。タイムライン上で前向きでも後ろ向きでも連続したタグは書き、途中が抜けたタグは誤った範囲にせず、名前を知らせて除外します。フレームをドラッグして並べ直し、もう一度書き出してください。

無料ですか?アカウントは必要ですか?

このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。

スプライトはアップロードされますか?

いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。

Asepriteやエンジンのプラグインは必要ですか?

いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。