見出し画像

【Emil's Task Re-act】2021年~2022年前半の進捗 その③

こんにちわ、犬アキです。
前々回前回に引き続き、2021年~2022年前半の進捗報告です。
今回はゲーム内容というよりかは開発寄りな内部実装系となります。

◆ランダムマップ(生成処理変更編)

本作でのランダムマップの生成処理、
元々は「部屋」と「部屋」を接続して組み立てる方式になってたのですが、
今回の作業で「部屋」を「通路」で接続する方式に変更しました。

雑に言うとローグライクなランダムマップに近い形に。
(通路を自動生成してるわけではないので厳密には違う)

作業してたのが結構前なので、なんで方式変更したかハッキリと覚えてないですが、この時点で前回の記事で書いた「部屋内のエネミーを全滅させないと先に進めない形式」の検討を考えていたので、「バトルが終わって一息つけると良いよね」という感じだったかな…?

最終的にこんな感じに。

修正後は「おぉ、良くなったやん…」となり、長い間作ってたランダムマップ処理がひと段落。
ただ、ほぼ同じタイミングで装飾タイル(草とか)の配置処理のテコ入れもして見た目向上してたので、生成処理変更だけで良くなったのかと言われると何とも言い難い感じに🤤

◆マップビルドの高速化

☝️の生成処理変更が入ったことでランダムマップの生成時間が10秒程に(涙
今回の変更前の時点で既に生成時間が長かったので「どうにかしないとなぁ」とは思ってたのですが、ここにきて大台に乗ってしまったので、思い切って改善しようということになりました。

時間かかってた原因は大きく4つ。
・UnityのTilemapやRuleTileを使ってた
・マップコリジョン配置が雑過ぎた
・非同期処理が雑過ぎた
・文字列比較しまくってた

〇原因①:UnityのTilemapやRuleTileを使ってた

タイルデータは外部で作ったものをインポートして使っているのですが、
ランダムマップを構成する各部屋のタイルを綺麗につなげるためにRuleTileを使っていました。

 1.タイルデータをロードしてTilemapに展開する。
  (一部のタイルはRuleTileに変換する)
 2.ランダムマップ処理で各部屋毎のタイルデータを配置する。
 3.TileMapからSpriteデータを取り出してポリゴン化する。

なんでこんな変なことになってるかというと、実装当時は「既にある機能は使っちゃおう」という考えだったからです。ランダムマップ生成後のTilemapがUnity上で見れて便利ではあったのですが…(生成時間を考えなければ)

結局、ランダムマップではTilemapとRuleTileを使用せずに完全に自前処理で簡易RuleTileみたいな処理を組むことに。
調べるまでもなくTilemapへの出し入れが重そうだった本件。
修正した後は生成時間が3秒程短くなりました。

〇原因②:マップコリジョン配置が雑過ぎた

実は1タイル1コライダというアホな実装になってました。
例えば64x64タイルのマップの場合、マップ生成時に4096個のBoxCollider(GameObject)が生成されてたのです。正にアホ🤤
当然実装当時から解ってて、「実装優先、後で調整しよう」のままでここまで来てた訳です。

「流石に対応するかぁ」と重い腰を上げて、ちゃんと対応しました。
確かコライダをまとめるComponentとかあった気がしたんですが、後のコリジョン系の拡張で困りそうだったので、自前処理でコライダをまとめるようにしました。
最終的なコライダ数はマップによって増減しますが、ざっくり1/20(5%)くらいまで減り、生成時間も4秒程減りました。

〇原因③:非同期処理が雑過ぎた&文字列比較しまくってた

この2点はまとめて修正してたので、まとめて書きます。
これまた修正を後回しにしてた案件です。

まず非同期処理。
これがまたあってもなくても変わらないような実装になってまして…
ちゃんとThreadとか使う形に変更するだけで良い感じに早くなりました。
ついでにロード中のフリーズも減ったので、右下のエミルのアニメもスムーズに再生されるように。

次に文字列比較。
マップ生成の途中で同一タイルか判定してる箇所が無数にあるのですが、
そのうちのテクスチャ比較をテクスチャ名の文字列比較でやってました。
タイルデータをUnityにインポートする際の変換で予めハッシュ値を取っといて、同一タイル判定時はそのハッシュ値を使うように変更。

この2つの修正で生成時間は1.5秒くらい減りました。

修正した結果

上記4つの調整に加え、そのほかの細かい修正もやりました。
その結果、ランダムマップのビルドは約10秒から約1.5秒程に。
一部は通常マップのビルド高速化にも繋がって万々歳な結果となりました。
ヤッタネ!

◆サウンドライブラリ入れ替え

前々から乗り換えたいなーと思ってたCRI ADX LE、ついに導入!
データロード関連で少々手古摺ったけど、概ね希望通りに組み込めました。

最近気付いたパンニングの不具合も、この乗り換えで解消。
あと初代エミタク(PSM)の頃にやりたかったけど諦めててそのまま来てたBGM部分ループにも対応できました。
まだ一部のBGMしか対応してないので、今後できる限り対応していきます。

仕事でも何度か使ったことあるCRIさんのライブラリ。
個人で使うのは当然初なので、色々とドキドキです。

2021年~2022年前半の進捗報告おわり

そんなわけで、約1週毎にゆっくりと書いた進捗報告でした。
他にもゲームバランス調整とか細かい修正とか色々やってましたが、そこまで記事にしちゃうと作業がガッツリ止まってしまうので割愛。

今後について

去年までは世の中の状況もあってイベント出展も一般参加も控えてました。
まぁ出展に関しては進捗的に元々なかったかも知れませんが…

今年は進捗的にも世の中的にもイベント出展等のアクションができるんじゃないかなと思ってます。
今はちょうど感染者数が増え始めたとこで今後どうなるかはまだわかりませんが、流石にそろそろ動きたいところ…
どっちにしてもゲームができてないと話にならないので、ゲーム制作は今後も変わらず駆け足で作っていこうかと思います。

今回はまとめて進捗報告ということでnote記事となりましたが、以前にも書いた通り遅筆で時間とられちゃうので、今後の進捗報告はTwitterで軽く済ます感じにするつもりです。

この記事が気に入ったらサポートをしてみませんか?