ゲーム開発進行状況報告:その19「祝・バグなおる!」
この度"クラフトシステムのボタンが機能しないバグ"が発生しておりましたが・・・修正完了しました!!!
今回はなぜそんなバグが発生してしまったのか?また今後導入されるであろう"弓"と"爆弾"のシステムについても考察していきたいと思います。
原因はアサインが外れていたこと
あるある過ぎますね。Unityでゲーム制作している方でこのバグを経験したことがない方はおそらく存在しないでしょう。それほど初歩的であり有名なバグです。
さすがに半年ちかくUnityを触っていればそんなことにはならなさそうなのですが今回は思いもしないことが原因でこのバグが発生していたようです。
結論から書くなら"一度設定したアサインを外してしまっていた"ことが原因でした。
なぜ設定していたにも関わらずアサインを外して(外れて)しまったのか?
当然外した瞬間のことなど覚えてはいないのでここからは考察になります。
まず私はこのバグを発生させる少し前からオーディオソース(スピーカー的な存在)のバグに取り掛かっていました。
クラフトしたアイテムを生成する際に再生されるSEの音がやたら大きかったので気になっていたのです。
何度やっても音量が小さくならないため仕方ないので一度オーディオソース自体を消してみることにしました。この時やったのがインスペクターからオーディオソースのアサインを消すことです。
おそらくこれが悲劇のはじまりでした。
この時アサインを削除したオーディオソースの位置というのはクラフトシステムの核をなすアイテムデータベースの参照設定の一個下だったのです。
つまりオーディオソースを削除するついでにアイテムデータベースも削除してしまったいた。
というのがことの顛末だったわけです。
そうとは知らず「イジったのはスクリプトだから原因はぜったいにスクリプトだ!!」とスクリプトばかりに目がいってしまっていた私。
当然原因はそちらではないのでいつまで経っても解決には至りませんでした。
あまりにも進展がないので丸一日Unityから離れて頭をリセットしました。
そして後日、改めてシステム全体を見返していた際に気がついた。という顛末です。
大切なのは視野を広く持つこと
今回のバグで戒めたのは”絶対にコレが原因だ!”と決めつけないということです。それをしてしまうと途端に視野が狭くなり、問題が視野外だった場合には解決に膨大な時間を要することになります。
”アサインしていたものを誤って削除してしまう”なんてヒューマンエラーは私にとって初めての経験でした。
ゆえにソレが原因なんてことは完全に理外の発想であり、コンポーネントを見る機会は何度もあったハズなのに気づくことができなかったのです。
一度ザッと全体を見回してみる。そして「ん?」と思ったところを深掘りしてみる。これが良いかなと思います。
スクリプトと決めつけていた時は「う〜ん、なんとなくここがダメなんじゃないかなぁ、」という感じでしたが、全体を改めて見てみると「あれ?」と思うことに気が付くことがあります。
それが今回はコンポーネントのアサイン設定でした。
今までのバグはたいていプログラムの中で起こっていた為、今回も「プログラムを順に追っていけば直るだろう」とタカをくくってしまいました。
遠回りに見えるかもしれないけど、全体を一度見回すバグ探しの方法は先入観を消し去るという意味では良い方法だと思いました。