本日のエンジニアブログを担当する安藤です。
前回に引き続きUnity初心者第一の壁であるAngryBotsを紐解いていこうと思います。
今回はPlayerをよりシンプルな状態にしつつUnityのデバッグ方法や解析手法の説明が出来たらと思います。
一度シンプルな状態にする
そうするとシーンビューはこんな感じになります。
清々しいほどシンプルです。
エラーを調べる
エラーログはConsoleというwindowで見る事ができます。
エラー(!が付いてるところ)をダブルクリックすれば大抵ソースのところまで飛んでくれます。
飛ばない場合はエラーログを読み解いていきましょう。
大雑把に言えばPlayerMoveController.jsの48行目のオブジェクトが存在しませんと言われています。
ソースコードを見に行きます。
Camera.mainでカメラを参照しています。
今回プレイヤー以外全て消してしまったのでカメラも消えています。
カメラを元に戻しましょう。
一度最初の状態に戻す
保存していなければもう一度立ち上げる事によって最初の状態に戻す事ができます。
Command+Z連打という方法もありますが、自分はよくこの方法を使っています。
他にもロールバックのアプローチ方法はGitやSVNなどのバージョン管理ツールを使うなど様々な方法がありますが長くなるので今回は割愛します。
動くようにする
エラーが出ました。
先ほど同じくエラーログから調べにいきます。
foreachの参照で落ちています。
ソースコードには異常はないのでゲームオブジェクトのインスペクターを見に来ましょう。
どうやら配列にnullが入っているのが原因らしいです。
(オブジェクトは消したが配列が残ってしまっている)
動きました。
しかしプレイヤーが落下してしまうのでCubuで床を設定します。
キーを押してみます。
AngryBotsの操作方法
- WASD(矢印キーも対応)で移動
- マウスクリックで攻撃
どうやら足音を生成するプログラムがうまく動いていないようです。
プレイヤーに接地しているオブジェクトの物理マテリアルを検出して
その物理マテリアルの種類で足音を変えるプログラムのようです。
足音を生成していると思われるMaterialImpactManagerを検索します。
command+shift+Fで検索ウィンドウが出ます。
どうやらMonoBehaviourを継承してAwakeをもっているようです。
GameObjectとしてシーンに存在すると予想します。
ロールバックします。
MaterialImpactManagerがシーンどこに使われているか検索します。
次はMisc(Caches)とカメラとプレイヤー以外全て消します。
まとめ
- シンプルな状態にしてから解析しましょう
- ロールバックの手段は確保しておきましょう
- コンソールログを参考にバグを修正しましょう
- ソースコードに異常が無い場合は対象のゲームオブジェクトを調べましょう
- MonoDevelop(IDE)の検索機能も活用しましょう
- Assetをシーンのどこで使っているか検索しましょう
以上です。
次回は衝突判定関係の説明をしたいと思います。