ビリヤードゲーム制作 バグを残したことへの懺悔 - アプリ名「Ferret's pool billiards」

こんにちは!

インディゲームを制作するディベロッパー「Studio Itachi」のZiggyです。
去年末にカジュアルビリヤードゲーム Ferre's pool billiards をリリースしました。

その中で時間の都合上放置したバグがあるので、その懺悔をします。

ステージクリア後、素早く次のステージに行こうとするとタイミング次第で次のステージがバグって表示される。

なぜかボールの初期位置が台の下になってしまいます。
キューボールも台の下にあるため、延々キューボールが落ち続けてリスタートを繰り返します。

ポーズボタンを押してギブアップし、もう一度入りなおすと直るので放置しました。
タイミング的にも1/30回程度で出るようなバグですし、ギブアップしても広告出してないので期間的になぜこうなるのかも調べてもいません。

まー、セーブまわりでしょうね。。。

連続でプレイすると処理落ちして、いつかはハングアップする。

ずーっとプレイしていると、10ステージを超えたあたりからだんだん処理落ちが気になりだして、さらに15ステージほどプレイするといきなりクラッシュします。
で発生するかどうかは確定かどうかは不明です。
クラッシュした際、予測ラインを動かしている途中でアプリが落ちたので、Raycast()まわりで何かリークがあるのかもしれないです…。

これも時間の関係上対応も調べもしてないですが、アプリを再起動すると直ります。

まず、このゲームは自分のために作ったので、プレイヤーが少ないだろうという点からプレイできないレベル以外のバグは放置するとしました。
さらに、このバグについては対応工数が高いわりに、再起動で直るので、頑張って直すよりも放置を選びました。

全体的に重い。

マップはカリングしてないから重いんだと思います。
あと、ウインドウを開いた時の重さは実装上の問題があります。
そもそも、ステージランクを表示するために毎回for文を30回回して計算しているので、セーブデータに保存すべきだった。
いろんなところで使っているのでホント無駄処理…そういうのがいっぱいあって重いです。

ゲーム中は予測ラインの処理が重いです。
LineRendererを2本出していて、1本にすると挙動が40%ぐらい完全します。
Rayでやっているからなのもあるけど、当たり判定をとってるコライダーがメッシュコライダーであることも一つあるかもしれません。
しかも頂点滅茶苦茶。このあたり、トポロジーが整理できるようになったら解消するのかなぁ…。

で、予測線を1本にしたりなくしたりすればもちろん軽くなりますが、放置しました。
理由はこのゲームが自分のためのゲームで、自分は予測線が必要だから。
予測線があっても、キューボールを壁に反射させてボールをポケットインさせたら格好よかった。

予測ラインの折り返した後のラインが正確ではない。

結構致命的でございますが、実は2本目のラインが不正確です。。
これは、理論はわかっています。
こういうことです。
単純に壁とのRayをとってるので、左図のようになってるんです。
単純な解決策としてはraycast用のコリジョンをボール半個分内側に作るとか、Rayが壁にぶつかったら法線方向にボール半個分移動した地点を基準にReflect()させるという手もあります。

時間的に試したりすることができなかったので対応を見送りました。。。

■最後に

バグ修正期間が短かったと思っています。
デバッグもほとんどできてないですしね。。。
まあこのタイトルは自分のための練習作品ではあるので、修正するつもりはないのですが、内にためておくと罪悪感がすごいあるのでここで供養させていただきます(直せよ)


もし記事が面白いなぁと思いましたら、Twitterのほうをフォローしていただけると嬉しいです!
日々のゲーム制作の進捗や、ブログの更新告知、たまにふと思ったことなんかを呟いていますのでよろしくお願いします。