読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

挫折しないUnity入門③

本日のエンジニアブログを担当する安藤です。
前回に引き続きUnity初心者第一の壁であるAngryBotsを紐解いていこうと思います。

今回はPlayerをよりシンプルな状態にしつつUnityのデバッグ方法解析手法の説明が出来たらと思います。

一度シンプルな状態にする

ビフォア
まずはプレイヤー以外全部消してしまいましょう。

シーンでみたビフォア
そうするとシーンビューはこんな感じになります。
清々しいほどシンプルです。

ぽちっとな
そして実行します。

なんかオブジェクトが無いって言われてる
エラーが出ました。

エラーを調べる

コンソールの場所
エラーログはConsoleというwindowで見る事ができます。

エラー(!が付いてるところ)をダブルクリックすれば大抵ソースのところまで飛んでくれます。
飛ばない場合はエラーログを読み解いていきましょう。

大雑把に言えばPlayerMoveController.jsの48行目のオブジェクトが存在しませんと言われています。
ソースコードを見に行きます。

エラーの原因
Camera.mainでカメラを参照しています。
今回プレイヤー以外全て消してしまったのでカメラも消えています。

カメラを元に戻しましょう。

一度最初の状態に戻す

もう一度立ち上げれば元に戻る
保存していなければもう一度立ち上げる事によって最初の状態に戻す事ができます。
Command+Z連打という方法もありますが、自分はよくこの方法を使っています。
他にもロールバックのアプローチ方法はGitやSVNなどのバージョン管理ツールを使うなど様々な方法がありますが長くなるので今回は割愛します。

動くようにする

カメラとプレイヤー以外削除
今度はカメラとプレイヤーを残して全て消します。

ぽちっとな
実行します。

エラーログ2
エラーが出ました。
先ほど同じくエラーログから調べにいきます。

エラーの原因2

foreachの参照で落ちています。
ソースコードには異常はないのでゲームオブジェクトのインスペクターを見に来ましょう。

参照しているオブジェクトが消えたからnullが入ってる
どうやら配列にnullが入っているのが原因らしいです。
(オブジェクトは消したが配列が残ってしまっている)

解決
ぽちっとな
ゼロにして実行します。

プレイヤーが
動きました。
しかしプレイヤーが落下してしまうのでCubuで床を設定します。

床を設定
床を設定パラメーター

ぽちっとな
実行します。

キーを押してみます。

AngryBotsの操作方法
- WASD(矢印キーも対応)で移動
- マウスクリックで攻撃

エラー3
エラーが出ました。
例よってログをたどります。

FootstepHandler
どうやら足音を生成するプログラムがうまく動いていないようです。

プレイヤーに接地しているオブジェクトの物理マテリアルを検出して
その物理マテリアルの種類で足音を変えるプログラムのようです。

ソースを検索
検索結果
足音を生成していると思われるMaterialImpactManagerを検索します。
command+shift+Fで検索ウィンドウが出ます。

マネージャー
どうやらMonoBehaviourを継承してAwakeをもっているようです。
GameObjectとしてシーンに存在すると予想します。

ロールバックします。

シーンのどこ
MaterialImpactManagerがシーンどこに使われているか検索します。

miscにあった
Miscの中にありました。

miscとカメラとプレイヤー
次はMisc(Caches)とカメラとプレイヤー以外全て消します。

ぽちっとな
実行します。

動いた
動きました。
銃も撃てます。

まとめ

- シンプルな状態にしてから解析しましょう
- ロールバックの手段は確保しておきましょう
- コンソールログを参考にバグを修正しましょう
- ソースコードに異常が無い場合は対象のゲームオブジェクトを調べましょう
- MonoDevelop(IDE)の検索機能も活用しましょう
- Assetをシーンのどこで使っているか検索しましょう

以上です。
次回は衝突判定関係の説明をしたいと思います。