Unityでゲームを開発でBuild And Runでは動作するのに、直接exeを叩くと動作しない現象が発生することがあります。これはアプリ自体は起動しているが、スクリプトやオブジェクトの処理が途中で止まっている(エラーが出ている) 可能性が考えられます。

スクリプト内で、CSV、JSON、画像などの外部ファイルを読み込んでいる場合、エディタ上とビルド後(exe)では指している場所が異なり、エラーとなります。

開発用ログ(Development Build)でエラーを確認

exeをダブルクリックして動作しない原因を特定するために、一度「ログ」が見える状態でビルドし直します。

・Unity: Unity 6 (6000.3.2f1)

File > Build Profiles を開き、次のようにDevelopment Build と Script Debugging にチェックを入れてビルドします。Autoconnect Profiler( CPUの負荷、メモリ消費量、GPUのボトルネックなどをリアルタイムでグラフ化) にもチェックを入れておくと、Unityエディタの Console ウィンドウと連携してリアルタイムでログを見ることができます。

主に「デバッグ(不具合修正)と最適化」のために使用します。

設定の使い分けまとめ
項目 開発中の日常的なテスト バグの特定 (コード) 動作が重い時の調査 最終リリース
Development Build ON ON ON OFF
Script Debugging OFF(任意) ON OFF OFF
Autoconnect Profiler OFF OFF ON OFF

生成されたexeを実行し、作成された次のログファイルを確認します。

ログの場所: %USERPROFILE%\AppData\LocalLow\[会社名]\[製品名]\Player.log

次のように、呼び出そうとした外部ファイルが見つからなかったエラーが発生しています。

PC(Windows)ビルドの場合、ファイルは以下のように配置されます。

・開発時 (Editor) : Assets/StreamingAssets/data.json
・ビルド後 (Windows EXE) : ProjectName_Data/StreamingAssets/data.json

StreamingAssets フォルダを使用した外部ファイルの読み込み

ビルド後も外部ファイルを読み込む場合、StreamingAssetsを使用します。Unityは、StreamingAssetsの内容をそのままの形で、ビルド後のフォルダへコピーします。

  1. フォルダの作成
  2. Unityエディタの Project ウィンドウで、Assets フォルダの直下に StreamingAssets という名前のフォルダを作成します。この中に、読み込みたいファイル(JSON、CSV、画像、動画など)を配置します。

  3. コードでのパス指定
  4. ファイルの場所は、次のように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);
            }
        }
    }
    
  5. 動作確認
  6. ファイルを StreamingAssets に入れ、一度ビルドして exe を実行し、正しく動作するか確認します。もし動作しない場合は、ビルド後のフォルダの「 ビルドしたフォルダ / ProjectName_Data / StreamingAssets 」内にファイルが存在するかを確認します。

    参考:Windowsビルド後の標準的なフォルダ構成

    ProjectName.exe
    ゲームを起動するための本体
    ProjectName_Data フォルダ
    最重要フォルダです。 ゲームのアセット(モデル、テクスチャ、音など)や、先ほど解説した StreamingAssets もこの中に格納
    MonoBleedingEdge フォルダ
    スクリプト(C#)を実行するためのランタイム環境
    UnityPlayer.dll
    Unityエンジン本体の機能が詰まったライブラリファイル
    UnityCrashHandler64.exe
    ゲームがクラッシュした際にログを送信・記録するためのツール