【Unity/C#】デバッグで意図しない動作を拾うには変な操作をしてみよう

子供の頃にRPGツクールでRPGを作って自分でテストプレイしてみて「よし、これで完璧だ!」と思って友達に遊んでもらいました。するとマップの端の方に謎のイベントが残っていて謎のメッセージが表示されました。(多分何かを試そうとして消し忘れていたんだと思います)
自分でテストプレイしている時は最短ルートでダンジョンを駆け抜けていて、そのマスの存在をすっかり忘れていたんです。
自分が想定できる動作は多くの場合うまくいくのですが、問題は想定していない動作、意図しない動作に隠れていることが多いんです。そこで、自分で作ったゲームで意図しない動作をチェックするには、「通常のプレイでこれはやらないだろう」と思うようなプレイング(変な操作)をしてみる必要があります。
デバッグで意図しない動作を拾うには変な操作をしてみよう
変な操作というとちょっと語弊がありますが、通常プレイではやらないことをやってみよう! という意図を込めて「変な操作」と呼んでみました。私が勝手に呼んでいるだけなので多分他の人には通じないと思います(笑)
ゲームを作った後は
- 早くリリースしたい!
- 早く遊んでもらいたい!
という気持ちがとても大きくなります。ついフォントまで大きくなってしまいました。
1つゲームを作ったことがあると共感してもらえるのではないかと思いますが、この感情はなかなか厄介なんですよね。
デバッグやテストプレイを早く終わらせたい気持ちが出てきてしまってついつい正常なプレイだけで終わらせてしまったり。
バグが出やすいのは正常なプレイよりも異常なプレイだったりします。
こうした異常なプレイを検知して事前に対策しておくことで、ゲームの品質を上げることができます。
異常なプレイの例
例えばボタンを押して処理を行っている間はそのボタンを押せないようにしたかったのに、制御できてなくて連打できちゃう、みたいな感じです。連打した結果効果音が何回も鳴るし、メニュー画面も何重にもなって表示されちゃうなんてことも。
RPGだったら敵キャラがターゲットになっているはずの魔法を味方に向けようとしてみたり、逆に味方がターゲットになる回復魔法を敵キャラに向けてみたりといったことも考えられます。フィールドでは岩や壁にぶつかってみるのも必要です。
レースゲームでもコースの周りに配置されている壁全部に体当たりしてみるのもいいかもしれません。コライダーに穴があったとしたらコースの外に抜け出してしまうことだってあるかもしれませんからね。
ホラーゲームだったらお化けに殴りかかってみるとかも必要ですね。物理で除霊できてしまったらホラーの怖さも半減してしまいます。
こんな風に自分が作ったゲームの遊び方を考えているときには想定していないような変な動きをしてみるのが大切です。想定している通常プレイ、そして想定していない異常なプレイの両方のチェックを忘れずに。
影響範囲が大きくなると……
例えば上で挙げたボタンが連打できちゃうケースだと、個人で遊ぶゲームならまだしも、ソシャゲなどでガチャのボタンを連打されたら大変です。
10連の値段で100連分のキャラが手に入った! なんてことになると同じお金を払っている人との不公平感がとても大きなものになりますからね。連打すればするほどキャラが手に入るなんて、恐ろしいゲームです。いや、プレイする側としては連打力によってコスパが上がる別のゲームが始まっていますね。
ソシャゲがサービスインしていたとしたら、メンテナンスの時間を通知して、データのロールバック対応をして……なんて考えるだけでも胃が痛くなります(笑)
とまぁ流石にこれは極端な例ですが、異常な操作は発生し得ると心に留めておくのは大切です。ユーザーさんが操作している中で、偶然そうした異常な操作にたどり着くこともあるため、そうなったときに問題が起きないように備えておきましょう。
自分のプログラムに甘くなるのが開発者
自分でデバッグする際は正常なプレイに加えて異常なプレイも積極的にしてみましょう。なんて思っていたとしても自分の作ったプログラムに対しては甘く接してしまうのが開発者の心情。
意識してか無意識的にか、バグが発生しそうな操作を避けてしまうこともあります。いえ、私だけかもしれませんが。
しかしここは心を鬼にして変なプレイをしてみるのが大切です。
例えば上で少し触れたボタンの連打だったら、画面内のボタンを連打しまくってみます。むしろボタンが表示されていない部分もタップしまくるのだって大切です。ボタン画像のアルファだけ0になっていて、透明でアクティブなボタンが表示されていることだってあるかもしれません(1敗)
あるいはタイミングを合わせて2つのボタンを押してみたりもします。それぞれで制御されていれば問題ありませんが、例えばボタンAを押したときにメニューを開くとして、そのメニューを開くアニメーション中に別のボタンを押せちゃったりするとおかしな動きになるはずです。
コントローラーを使うゲームなら本来キー入力待ちをしているボタン以外を全力で連打してみます。方向キーやスティックをグリグリしたり、LRボタンをこれでもかと連打してみたり。ロード中やキー入力待ちの間に意味もなくコントローラをいじりたくなることもありますから、そんなユーザーさんの行動でも問題が起きないようにしておきたいところです。
また、キャラクターを歩いて移動させるゲームなら壁にぶつかりまくってすり抜けないことを確認したり、やたらとジャンプして壁に登ろうとしてみたりといったこともやると良いでしょう。壁を登って別エリアにいったら、本来通るべきイベントポイントをスルーできてしまって、ストーリーのフラグが不整合を起こしてゲームが進行不可能になる、なんてこともあるかもしれません。
「ここは大丈夫だろう」と思ったところほど、自分が大丈夫だと思う動きしかしていなかったりして、バグが隠れていたりするのでぜひチェックしていきましょう。
もし不幸にも、いや幸いにもバグを見つけることができたのなら、その再現方法まで明確にするとグッド。直すまでの時間が短縮しやすくなります。
しかもいくつかのステップが組み合わさったバグであることも多いので、根本原因を探るのも大切です。
できれば別の人にお願いしたい……!
本当は友達にプレイしてもらうと自分が考えていなかったプレイ方法を見つけてくれたりするんですよね。開発者が脳内補完してしまう部分でも客観的に判断して操作してくれますから。しかし、新型コロナの状況を考えると気軽に会いに行くのも難しいのが辛いところです。
スマホアプリだったらパッケージをアプリストアにアップロードしてしまって、Androidなら内部(アルファ)テストとして、iOSならTestFlightを使って試しに遊んでもらえるといいかもしれません。Steam向けならビルドしたゲームをうまく渡せれば遊んでもらえるかも?
ゲーム会社の方々がお金を出してでもデバッガーの方にデバッグ作業をお願いしているのは、こうした異常な操作を客観的に見つけてもらえるからなんだと思います。
そうはいっても自分ひとりで確認しなきゃいけないこともありますから、その場合は別の自分の仮面をかぶるかのように、開発者としての自分の裏をかくような動作をやってみてください。
まとめ
バグの多くは正常なプレイではなく異常なプレイ、変な操作によって明るみに出ます。ゲームをリリースした後に見つかるとその時点で遊んでいるユーザーさんの楽しみを削いでしまうことにもなるので、なるべく事前に見つけておきたいところです。
正常プレイに喧嘩を売るくらいの勢いで変な操作をしまくって、プログラムの穴を見つけるつもりでいろいろといじってみましょう。
ゲーム開発の攻略チャートを作りました!
-
前の記事
ゲームの役割は課題を与えること。課題の解決が自己効力感を高める 2020.12.14
-
次の記事
【第29回Ex】作成したゲームをAndroid向けにビルドするUnityチュートリアル 2020.12.16
コメントを書く