【Unity2D】移動処理とスプライト分割見直し

Unity2D

Unity2D ARPG

こんにちは。なおキーヌです。

ブログ毎日更新は322日目になります。

前回「【Unity2D】プレイヤー操作の完成までの手順書」にてプレイヤー操作の作成手順を明確化しました。

本来は明日からやる予定でしたが、やる気が満ち溢れていたのでポケモン盾をやる時間を減らしました。

結構行き当たりばったりで作っていたので、一度必要になるアニメーションを洗い出して
アニメ管理ナンバーを書き出してみました。

後はスプライトも256×256じゃ足りなかったので、512×512にしました。

その際にスプライト分割にも色々問題が出てしまったので一度仕切り直ししたので書き残しておきます。

  1. 透過画像も分割対象にしよう
  2. UnityのEditorを拡張しよう
  3. 上下左右でアニメーション管理番号をきめる

透過画像も分割対象にしよう

UnityのSpriteEditorを使うと簡単に指定サイズでスプライト画像として分割してくれるのですが、
透過部分は分割対象にならないという問題点があります。

これの何がダメなのかというと、例えば思い付きで予備スペースにドット絵を増やしたとしたら
再度分割しようとしたときスプライト番号がズレてしまうのです。

そうなってしまうとアニメーションのタイムラインの設定の市直しの必要が出てきます。

少なければ少しの時間でリカバリできますが、多いとその修正だけで1日終わってしまうかもしれません。

なので、出来れば最初から予備スペースもスプライトの1つとしてカウントしてほしいですよね。

しかしデフォルトのSpriteEditorではどうやらできそうにないみたいです。

調べているとUnityのEditorを拡張してやる方法を見つけました。

UnityのEditorを拡張しよう

Unityは特定のクラスを継承したスクリプトファイルを作ることで
エディタそのものを拡張する機能が備わっています。

普段手動でやっているようなことを自動化したり視覚的に簡易操作で設定できるようにしたり様々な改造ができます。

そして今回紹介するのは「透明のスプライトも分割対象にするための拡張」です。

Spriteの分割を透過部分も含めて自動で行う【Unity】【エディタ拡張】
http://kan-kikuchi.hatenablog.com/entry/SpriteSliceWindow

ニンテンドースイッチ等でもプレイできる神巫女というゲームを作成した「@Kan_Kikuchi」さんが公開してくださっている記事をみつけ
そのまま上記に載っているスクリプトをコピペしただけで使用できました。

記事は2017年でUnityのバージョンが「Unity 5.5.2f1」と少々古い状態ではありますが、
私の使っている「Unity 2019.1.df1 Personal」でも特にエラーもなく使用することが出来ました。

基本的に上記ブログの手順で問題なかったため、コチラでの記載は転載になってしまう為省略致します。

恐らく自力でやろうとすると1週間では解決できなかったでしょう。

ありがたく使わさせていただきます!

上下左右でアニメーション管理番号をきめる

これで透明部分もスプライトの一部として分割することが出来たので、
画像の解像度を上げない限りはスプライトの管理番号がズレる心配がなくなりました。

既存のアニメーションが案の定ズレてしまっていたので直して、
なおかつ遷移するためにスクリプト側で使っていた変数もルールを決めることにしました。

  • 0-9は下向き
  • 10-19は上向き
  • 20-29は左向き
  • 30-39は右向き

と決めました。

例えば下1桁が2の時は攻撃アニメーションという風に決めておけば、
2桁目を見ればどちらを向いているのかもわかるので分岐処理が計算式1つになってスッキリするメリットもあります。

ここで、そういえば数値型の1つ目の桁だけを取りたいと木ってどうすればいいんだろうと悩みました。

パッと思いつくのは

  • 文字列にして添え字で最期の文字を取り出して数値に戻す
  • Log関数を使ってなんとかする
  • ゴリ押しでなんとかする

文字列にするのは処理的に重そうですし、無駄が多すぎますね。

かっこよくLog関数を使ってもよかったのですが、私の偏差値38問題のおかげでLogの使い方がよくわかりませんでした。

仕方ないので動画でLogについての知識を得ていたところ、ツイッターのリプライで

「n%10ではだめ?」と神のお告げをいただきました(圧倒的感謝!

メチャクチャシンプルだし見た目もわかりやすい。

これ以上にないやり方でした。

これはプログラミング力というより単純に知識レベルの問題ですね……

プログラミングをやっているといかに自分の勉強不足が露呈して恥ずかしい限りです。

しかし助言していただける環境というのは本当に素晴らしいですね。

恩返しはゲームを完成させること。

それ以外に思いつきません。がんばります。

今回はここまでで、とりあえず以下の状態になりました。

  • 上下左右のスタンドアニメーション
  • 上下左右の歩行アニメーション
  • 上下左右の攻撃アニメ―ション

進捗的には殆ど進んでいないのですが、管理がしやすくなったため次の制作がスムーズになりました。

何事も計画が大事ですね……

行き当たりばったりで何かを作ることが多い性格なので、
これからはしっかりと計画してから進めていきます。

それでは。