今回はホラーゲームの完成プロジェクトアセット”Horror FPS Kit “のレビューをお送りします。
“Horror FPS Kit”のアセットをインポート
アセットをインポートする際「現在のプロジェクト設定が上書きされます」とダイアログが表示されます。新規のプロジェクトを作成してからアセットをインポートしました。
“Horror FPS Kit”のアセットファイルの内容
アセットのインポートが完了したので[Project]ウィンドウでファイルの内容を確認しましょう。
[HFPS 1.3]フォルダの中には次のフォルダが有ります。
- [Data]フォルダ – ゲームの設定ファイル”GameConfig.cfg”が格納。
- [HFPS Assets]フォルダ – アセットファイルが格納。
- [Standard Assets]フォルダ – Unityのスタンダードアセット各種が格納。
- HFPS KIT 1.3 – Documentation.pdf – マニュアルPDFファイル。
- [Content]フォルダ – サンプルシーンで使用されている各種アセットファイルが格納。
- [Resources]フォルダ – “FloatingItem”プレハブファイルが格納。
- [Source]フォルダ – その他のアセットファイルが格納。
- [Animations]フォルダ – アニメーションファイルが格納。
- [Materials]フォルダ – マテリアルファイルが格納。
- [Models]フォルダ – 3Dモデルファイルが格納。
- [Prefabs]フォルダ – プレハブファイルが格納。
- [Scenes]フォルダ – サンプルシーンが格納。
- [Scripts]フォルダ – スクリプトファイルが格納。
- [Sounds]フォルダ – サウンドファイルが格納。
- [Textures]フォルダ – テクスチャファイルが格納。
サンプルファイルの再生
[Project]ウィンドウ > HFPS Assets > Content > Scenesフォルダの中には3つのシーンファイルがあります。[Project]ウィンドウ > HFPS Assets > Content > Scenes > MainMenuファイルを開きます。
メニュー:File > Build Settingsを選択して[Build Settings]ウィンドウを開くと、”MainMenu”、”HorrorScene”、”Showcase”の順でシーンファイルが登録されています。
それでは”MainMenu”を開いて再生してみましょう。再生ボタンをクリックして実行するとタイトル画面とメインメニューが表示されます。
メニューから”Play Horror”をクリックするとレベル選択画面が表示されます。ここでは”Main Horror Scene”を選択します。
サンプルファイルを再生するとプレイヤーが移動できないエラーが!
“Main Horror Scene”シーンを再生すると[Console]ウィンドウに次のエラーメッセージが大量に表示されます。
Parameter name: index
プレイヤーを操作してみるとWキー前進、Aキー左移動、Sキー後退、Dキー右移動といったキーボード操作ができません。
[Console]ウィンドウに表示されているメッセージの詳細をみると次のような内容になっていました。マウスの視点操作については問題ありません。おそらく、プレイヤーの移動キー割り当てができていないのではないかと思いますが、正直、エラーメッセージを見ても見当がつきません。Parameter name: index
System.Collections.Generic.List`1[System.String].get_Item (Int32 index)
(at /Users/builduser/buildslave/mono/build/mcs/class/corlib
/System.Collections.Generic/List.cs:633)
ConfigGameReader.GetKey (Int32 index) (at Assets/HFPS 1.3/HFPS Assets/Content/Scripts/SerializationManager/ConfigGameReader.cs:71)
InputManager.Deserialize () (at Assets/HFPS 1.3/HFPS Assets/Content/Scripts/SerializationManager/InputManager.cs:28)
InputManager.Update () (at Assets/HFPS 1.3/HFPS Assets/Content/Scripts/SerializationManager/InputManager.cs:20)
ちなみに[Project]ウィンドウを見ると[Assets]フォルダの中に[Data]フォルダが作成されていて中は空っぽです。
エラーの原因が分からないので制作者に問い合わせメール
エラーの原因が分からないまま考えていてもしょうがないので、制作者の”THUNDERWIRE STUDIO “に問い合わせメールを出してみたところ、一日後に返事がきました。英文を翻訳すると次のような内容です。
問題は”RebindableInput.cs”にあります。原因は”Main Menu”シーンを実行した際、このスクリプトが設定ファイルの保存場所がすでに設定されていると判断して、設定ファイルの保存場所を保存しないことです。
添付ファイルで修正スクリプトを送付しましたので、古いファイルを置き換えてください。その後、スクリプトが設定ファイルのパスを設定するために”Main Menu”シーンを実行してください。
次の場所にある”RebindableInput.cs”スクリプトを置き換えてください。
Assets > HFPS 1.3 > HFPS Assets > Content > Scripts > SerializationManager フォルダ
ということでとりあえずメールで送ってもらった”RebindableInput.cs”を上書きしてみました。
すると!ちゃんとプレイヤーを移動できるようになりました!ありがとう”THUNDERWIRE STUDIO “サポート!
エラーのまとめ
サポートの回答メールに添付されていたスクリプトファイル”RebindableInput.cs”と、元のスクリプトファイルを比較して見たところ、次の2行が追記されていました。
PlayerPrefs.SetString (“ConfigPath”, config.GetFilePath(FolderName));
“PlayerPrefs.SetStringというのは、公式マニュアル を見ると”キーに対する値を設定します”と書いてあります。そしてその設定の保存場所については次のように書いてあります。Windowsのレジストリに保存されているようです。
というわけで、レジストリを調べてみましょう。Windowsのスタートボタン > Windows システムツール > ファイル名を指定して実行 を選択して。ウィンドウが開いたら”regedit”を入力して[OK]ボタンをクリック。
ユーザーアカウント制御のダイアログが表示されるので[OK]をクリックするとレジストリエディターが開きます。メニュー:編集 > 検索 を選択して検索する値に”ThunderWire”を入力して検索します。
すると下記の場所にキーが保存されていました。
コンピューター\HKEY_CURRENT_USER\Software\Unity\UnityEditor\ThunderWire\TWHFPSKit
レジストリをいったん削除し、スクリプトファイル”RebindableInput.cs”の違いでレジストリの値がどう変わるのか比較してみたのが次の図です。
古いスクリプトファイル”RebindableInput.cs”で実行した場合のレジストリキー
修正したスクリプトファイル”RebindableInput.cs”で実行した場合のレジストリキー
比較してみると、修正したスクリプトを使用した場合はレジストリに”ConfigPath”と”InputConfig”キーが増えています。キーの名前をダブルクリックして値を見てみると”ConfigPath”キーにはUnityプロジェクトフォルダ内のAssets > HFPS 1.3 > Data フォルダが値として設定されていました。そして”InputConfig”キーには”GameConfig.”が値として設定されていました。
サポートの回答メールに書いてあった”スクリプトが設定ファイルの保存場所がすでに設定されていると判断して、設定ファイルの保存場所を保存しない“という内容について、最初は意味がよく理解できなかったのですが、レジストリを調べて分かったのは、スクリプトファイル”RebindableInput.cs”が実行されると、プロジェクトフォルダ内での設定ファイルの保存所をレジストリキーに設定する、ということだったようです。
ひとまず無事にトラブルが解決しました。次回はアセットファイルの内容を詳しく調べてみたいと思います。