Unityでゲームを開発でBuild And Runでは動作するのに、直接exeを叩くと動作しない現象が発生することがあります。これはアプリ自体は起動しているが、スクリプトやオブジェクトの処理が途中で止まっている(エラーが出ている) 可能性が考えられます。
スクリプト内で、CSV、JSON、画像などの外部ファイルを読み込んでいる場合、エディタ上とビルド後(exe)では指している場所が異なり、エラーとなります。
開発用ログ(Development Build)でエラーを確認
exeをダブルクリックして動作しない原因を特定するために、一度「ログ」が見える状態でビルドし直します。
・Unity: Unity 6 (6000.3.2f1)
File > Build Profiles を開き、次のようにDevelopment Build と Script Debugging にチェックを入れてビルドします。
生成されたexeを実行し、作成された次のログファイルを確認します。
ログの場所: %USERPROFILE%\AppData\LocalLow\[会社名]\[製品名]\Player.log
次のように、呼び出そうとした外部ファイルが見つからなかったエラーが発生しています。
PC(Windows)ビルドの場合、ファイルは以下のように配置されます。
・開発時 (Editor) : Assets/StreamingAssets/data.json
・ビルド後 (Windows EXE) : ProjectName_Data/StreamingAssets/data.json
StreamingAssets フォルダを使用した外部ファイルの読み込み
ビルド後も外部ファイルを読み込む場合、StreamingAssetsを使用します。Unityは、StreamingAssetsの内容をそのままの形で、ビルド後のフォルダへコピーします。
- フォルダの作成
- コードでのパス指定
- 動作確認
- ProjectName.exe
- ゲームを起動するための本体
- ProjectName_Data フォルダ
- 最重要フォルダです。 ゲームのアセット(モデル、テクスチャ、音など)や、先ほど解説した StreamingAssets もこの中に格納
- MonoBleedingEdge フォルダ
- スクリプト(C#)を実行するためのランタイム環境
- UnityPlayer.dll
- Unityエンジン本体の機能が詰まったライブラリファイル
- UnityCrashHandler64.exe
- ゲームがクラッシュした際にログを送信・記録するためのツール
Unityエディタの Project ウィンドウで、Assets フォルダの直下に StreamingAssets という名前のフォルダを作成します。この中に、読み込みたいファイル(JSON、CSV、画像、動画など)を配置します。
ファイルの場所は、次のようにApplication.streamingAssetsPath を使用します。
using System.IO;
using UnityEngine;
public class DataLoader : MonoBehaviour
{
void Start()
{
// 読み込みたいファイル名を指定
string fileName = "data.json";
// プラットフォームに応じた適切なパスを自動取得
string filePath = Path.Combine(Application.streamingAssetsPath, fileName);
if (File.Exists(filePath))
{
string jsonText = File.ReadAllText(filePath);
Debug.Log("読み込んだ内容: " + jsonText);
}
else
{
Debug.LogError("ファイルが見つかりません: " + filePath);
}
}
}
ファイルを StreamingAssets に入れ、一度ビルドして exe を実行し、正しく動作するか確認します。もし動作しない場合は、ビルド後のフォルダの「 ビルドしたフォルダ / ProjectName_Data / StreamingAssets 」内にファイルが存在するかを確認します。
参考:Windowsビルド後の標準的なフォルダ構成

