【Unity】バグを見つけたら再現方法を確認するのが大事【C#】

【Unity】バグを見つけたら再現方法を確認するのが大事【C#】

一切バグの出ない超すごいプログラムを書く、なんてのは理想郷を追い求めるようなもので一生懸命テストしたゲームでもバグは出てきます。

見つかったらバグを修正してプログラムの品質を上げていきましょう。できればリリース前に見つけられるのが良いのですが、リリース後に見つかることもあります。この場合は結構心にきますが粛々と修正しましょう。

バグを修正するためには、見つかったバグが単発の事象なのか、それとも再現性があるのかを確認するとグッド。再現性のあるバグとはある手順を踏むと毎回発生するバグです。例えば特定のスキルを選択したらゲームが止まる、みたいなバグのこと。

再現方法を見つけることでバグの修正がグッと早くなります。

 

 

バグを見つけたら再現方法を確認するのが大事

コンピュータは同じ値を入れたら同じ結果が返ってくるので、まずはどのような操作でバグが発生するのかを特定するのが解決の近道です。

例えばRPGで敵が回復魔法を使った後に味方が回復魔法を使うと敵キャラのHPを回復してしまう、なんてバグがあったとします。おそらく最初にこのバグに遭遇した時にはどのような手順でバグが発生したかまでは分からないと思います。味方が回復魔法を使ったのにHPが回復してなくて敵に殴り倒されるシーンを眺めて「あれ? なんか変だぞ?」と気付くくらいでしょうか。

お互いに回復するケースだとボス戦くらい白熱している状況でしょうから、初見プレイで全キャラの行動を把握しているのは難しいでしょう。TAS勢やRTA勢だったらやってそうですけど(笑)

この例だったら、バグが発生したボスとの戦いだけでこの現象が起きるのか、他のボスとの戦闘でも起きるのか、あるいは雑魚戦ではどうなのか、なんて感じでどの状況で起きるのかを絞り込んでいく必要があります。考えられるパターンとしては、

  • そもそも味方が使う魔法の設定がおかしかった
  • 敵キャラが回復魔法を使う際のターゲット設定でミスがあった
  • ボス戦だけ味方の回復魔法が正しく動いていなかった
  • 直前で使ったボスの特殊魔法が悪さをしていた

なんて感じのものがあります。多分考えようと思えばもっとズラーっと出せると思います。

思いつく原因を列挙してみて、仮説と検証を何度か繰り返してみて、なんとなくこうすると再現しそうだな、なんてのが見えてきて具体的な再現手順に落とし込んでいく流れになります。

バグの発生する手順が分かれば発生しない方法に修正する方法も見つけやすくなります。

 

再現しないバグは怖い

逆に再現しないバグほど恐ろしいものはありません。私たち開発者がどうやっても再現できないのに、お客さんの目の前では実際に問題が起きている……なんてこともよく聞く話です。

開発者の手元で再現しないバグは本当に直しようがないんですよね。「多分こうだろう」と予想して直したつもりが二次災害を起こすこともありますから、報告をもらったバグそのものを目の前で再現できるようにしないといけません。

この場合はバグを報告してくれた方から詳細な情報を聞くのが大切です。手順や環境、可能ならバグが発生した瞬間の画像など、手がかりになる情報をお願いして送ってもらいましょう。

開発している環境と実行している環境では取り巻く環境が違うので可能な限りそこも合わせる必要があります。どのような環境で実行して、どのような事象が発生しているのかをヒアリングして特定することで再現性を見出すこともあります。

Unityの場合はエディタ上でゲームを実行していますが、ここで動くからといってスマホで同じように動くとは限りません。最低限シミュレーターを使って動かしてみないと同じ環境とは言えません。もちろん実機を使った方が良いですし、可能なら同じバージョン、同じ端末がベストです。Androidだと同じ端末を入手するのは難しいケースもありますが、実機でテストできるWebサービスなどもあるのでそちらを使うのもありだと思います。

 

二段階バグは見つけにくいかも

作ったゲームのテストを行う際には、あるボタンを押して動作を確かめる、という一問一答形式の確認に加えて、あるボタンを押した後に他のボタンを押してみるという二段階のテストも必要になってきます。

上の方で紹介した敵キャラ回復問題だと、味方が回復魔法を使ったり敵キャラが回復魔法を使ったりと、単体では想定通りの動きをしていたとしても、それが組み合わさった時に問題が発生していました。

処理が終わった後に、グローバルな変数やクラスのフィールドが適切な値になっていないまま次の処理に進むことでなんらかの問題を引き起こすケースは案外多いので、テスト時には何段階か操作を続けてみることも大切です。開発期間中に見つけられれば、変数のスコープ(見える範囲、利用できる範囲)を狭くすることで対応したりもできますからね。設計時に気付けるのが一番ですが、開発中に気付くことだってあるので、テストをしてみて直せればOKです。

ゲームの場合は通しプレイをすることがほとんどなので、ある程度こうした組み合わせによるバグを見つけやすいようにはなっていると思います。RPGだったらボス戦も複数の攻略法で挑んでみるのも良いかもしれません。なんならEditor拡張とかで戦闘シミュレーターなどを作っておくのもおすすめです。RPGツクールだと標準で戦闘テストの機能があったので便利でした。

Editor拡張についてどんな感じか概要を知りたい場合は以下の記事もご参照くださいな。

 

バグの発見は品質を上げるためのきっかけ

自分でバグを見つけたり、他の人から「バグがあったよ」と言われるのは結構心に来ますが、バグを直せばさらに良いゲームになるのでむしろポジティブに捉えるといいかもしれません。

その解決方法としてはまず再現方法を見つけるのが近道なので、状況をよく確認して同じようにバグが発生することを確かめてから修正に乗り出すとグッド。

 

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!