渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

1枚の画像に複数のSpriteを保持するMultipleモードを使う


f:id:esakun:20170525093834p:plain

あまり2Dゲームを作ったことが無い、というか全く無かったため、勉強がてら2Dキャラクタを動かしたりしています。

2Dキャラを作る際にまずは画像が必要になってきますが、コチラをSpriteシートとして扱うことで1枚の画像でキャラクタのパーツやモーションフレームを生成することが出来ます。
パーツ分、別テクスチャを使ってしまうとその分ドローコールが発生してしまいますが、同じテクスチャとして扱えるSpriteだと1度の描画で表示できるためとても負荷的にエコです。
(i)ドローコールバッチングされない理由を調べる方法はコチラ

Sprite設定のおさらい

Spriteを作る方法は簡単です。今回は1枚の画像に複数のSpriteを内包する方法をとります。

f:id:esakun:20170528162614p:plain:w160
Spriteとして扱うパーツを1枚絵にした画像を用意します。

f:id:esakun:20170528162759p:plain:w320
Texture TypeSpriteに設定。Sprite ModeMultipleに設定し、Sprite Editorを開いてSpriteの設定をします。

f:id:esakun:20170528163906g:plain

各パーツの範囲やピボット位置を決めて名前を設定していきます。

f:id:esakun:20170528164741p:plain:w150

するとこのようにSpriteアセットとして参照を取得し、使用できるようになります。そのままヒエラルキーにドラッグアンドドロップすると画面に表示されます。


本記事はSpriteを作る元画像をどのように管理すればよいのかを考察しています。

  • プレーヤー
  • ステージ
  • アイテム
  • 武器
  • エフェクト
  • その他

ゲーム制作には様々な素材が必要です。

私の想定だとplayer.psd、stage.psd、enemy.psd…各Spriteの元画像毎にそれぞれアトラスが作られるのかと思ったのですが、そうではありませんでした。

f:id:esakun:20170528153928p:plain:h360

今回制作した複数のPSDファイルからアトラス画像を生成した例です。

a.psd b.psd c.psd d.psd
f:id:esakun:20170528154843p:plain:w100 f:id:esakun:20170525095759p:plain:w100 f:id:esakun:20170528155023p:plain:w100 f:id:esakun:20170528155107p:plain:w100

これらのPSDのPacking Tagを同じ文字列にします。
すると以下のように1枚にまとめられます。

パック後
f:id:esakun:20170528154555p:plain:w240

(i)もし Packing Tagが同じだけどアトラス化されないときはコチラをどうぞ

パック後のアトラス画像はWindow > Sprite Packerから確認できます。

Packing Tagさえ同じであれば良いので、Spriteの元画像は自由に構成して問題なさそうです。しかし、元画像Spriteパーツの配置が変わっても追随してくれるわけで無いところは注意が必要ではあります。

Sprite元画像のファイル形式について

Unity は次のファイル形式を読み込みできます。 PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT, EXR, HDR です。Unity により複数レイヤーの PSD や TIFF ファイルも問題なくインポートできます。これらはインポート時に自動的に統合化されますが、レイヤーはアセット自体に保持されるため、これらのファイル形式をネイティブで使用するときにデータを失うことはありません。

公式より

以上のことからPhotoshopを持っているならPSDで良いと思います。

f:id:esakun:20170525094238p:plain

こんな感じでパーツを小分けにして配置しました。

最後に

f:id:esakun:20170525093643g:plain
※Unity-Chan2Dそのまま使うのは味気なかったのでデフォルメしてみました

最終ゲームになったら良いなとは思うけど、やればやるほど、自分で考えた企画の矛盾や面白さへの疑問がこみ上げ、モチベーションが下がり、お蔵入りパターンへ。この連鎖を断ち切る方法を募集しております。

開発環境

  • Unity5.6.1p1
  • macOS Sierra