記録3、4日目 Day3,4
開発日記 約50時間の大改修。ようやく原因が分かりました。
6月29日の明け方から取り組んでいた、原因不明の不具合。
ようやく解決しました。
今回の不具合は1つではなく、実は複数の問題が同時に発生していました。
不具合① タイルだけ左端に小さく表示される
一番悩まされたのがこれです。
背景画像やキャラクター画像は正常に表示されるのに、
マッチ3パズルのタイルだけが画面左端に小さく表示される。
画像の真ん中オレンジの枠の中に小さく表示されているのがタイルです。
最初は存在にすら気が付かなかったですが、オブジェクトができていることは確認できて、どこにあるのか探したらそこでした。
というわけでタイル自体は存在しています。
・マッチ判定は動く
・消去エフェクトも再生される
・ゲーム自体は進行する
それなのに、表示だけがおかしい。
レイヤーや座標、Canvas、Prefabなど考えられるものはほぼ全て確認しましたが改善せず……。
最終的には約50時間かけて1から作り直すことになりました。
しかも途中で別の問題にもぶつかり、
パズル部分は合計3回作り直しています。
もちろん完全に同じものを作ったわけではありません。
そのたびに演出も見直し、
・飛んでいくハート演出
・姫騎士の被弾演出
・タイル消去エフェクト
・コンボ演出
・交換時の矢印演出
・落下時のつぶれアニメーション
などを追加した結果、現在は作り直し前よりも見た目がかなり豪華になりました。
原因はImageとSpriteRendererの混在
ここまで作り直してようやく気付いたのが、
画像の表示方法が原因だった可能性です。
Unityには画像を表示する方法が大きく2種類あります。
- Image(UI)
- SpriteRenderer(スプライト)
今回、これらを混在させていたことで、
- Sorting Layerが効かない
- Order in Layerで前後関係を制御できない
- エフェクトが画像の裏へ隠れる
- 座標合わせが難しくなる
など、思わぬ問題が発生していました。
そこで画像をSpriteRendererへ統一。
すると表示がおかしかった部分も解消し、演出との相性も大幅に良くなりました。
もし最初に原因へ気付けていたら、
2時間くらいで終わっていた不具合だったかもしれません(笑)
不具合② 特定の列だけタイルが落ちない
もう一つ厄介だったのが、
ゲーム途中から
特定の列だけタイルが落下しなくなる
という現象。
こちらもかなり悩みましたが、
原因は座標計算でした。
不具合③ 左端を押すと2列目が選択される
さらに、
左から1列目を押しているのに2列目が選択される
というズレも発生。
こちらも同じ原因でした。
犯人は「小数点を整数へ変換する処理」
結局、
落下しない問題も、
選択位置がズレる問題も、
どちらも原因は同じでした。
座標計算の途中で
小数点以下を整数へ変換する処理
を入れていたことで、
タイル位置の判定が少しずつズレてしまっていたようです。
一見すると「丸めれば安全そう」に思える処理でしたが、
グリッド座標を扱うマッチ3パズルでは、ほんの少しのズレでも大きな不具合につながることを痛感しました。
現時点での状況(音あります)
作り直したからこそ得られたもの
今回の作業では、
単に不具合を直しただけではありません。
途中で演出を強化しながら組み直したことで、
以前よりもコードの整理が進み、
今後機能追加しやすい構成にもなっています。
さらに、
- SpriteRenderer中心の設計
- 演出のPrefab化
- パーティクル管理
- アスペクト比への対応
- オブジェクト同士の役割分担
など、Unity初心者の自分にとって非常に大きな経験になりました。
今回のまとめ
約50時間。
パズル部分を3回作り直し。
何度も心が折れそうになりましたが、
結果として原因も分かり、演出も大幅に進化しました。
遠回りにはなりましたが、
この経験は今後のゲーム開発で必ず役に立つと思います。
まだまだ完成までは道のりがありますが、一つひとつ問題を解決しながら、少しずつゲームとして形になってきました。
**これも経験値ということで、また一歩前進です。
しかし…先日はAIの提案を聞くな!って言いましたけど、3度の改修でシステム構造見直したからまんまとチャッピの提案通り(記録2日目参照)になってるんですけど、もうAIの深謀遠慮からしたら浅はかな私なぞ、思い通りに動かすことは容易いのかも知れません。
この72時間でやったこと
大改修とは別に下記はリニューアル
ハートが姫騎士へ飛んでいく演出
タイル選択エフェクト
タイル交換方向の矢印表示
タイルが消える際の物理演出
タイルが落下したときの潰れアニメーション
スマホ画面サイズに対応するAspectKeeper
など、システム面も演出面も追加と見直しをしました。
現在は、作り直し前とほぼ同じ進捗まで戻り、さらに演出面は強化されています。
結局いちから刷新することになったわけですけど、戻ってこられてよかった。
ここからは演出のこだわりよりもUIをとりあえず配置して全体像と残りの作業量を把握。
というかUI配置するまではいいけどそこから演出色々したくなるので…。
ただ1つのステージを完成させて拡張できるようにすればそれ以降のステージ制作は楽になるんでバランスですね。
画像は語尾に♥をつけたチャッピ。
お腹空いたんでいざコンビニへ。
良かったらフォローもよろしくお願いします。