はじめに
やらかしたので備忘録です。
Unityで実行した際には呼び出せたbatファイルが
ビルドしたプログラムでは呼び出せなかった話です。
[2018/3/2/10:00]
OSとUnityのバージョンを記載しました。
原因のパス指定の間違いについての言及を詳細にしました。
開発および実行環境
- Unity 5.6.3f1
- Visual Studio C# 2017
- Windows 10 Home
原因
UnityでPlayボタンを押して実行したものとビルドしたものでbatファイルへのパス指定が変わっていた。
そもそもビルドしたプログラムではbatファイルは存在してなかった(?)
batファイルはAssets/ProcessScriptsディレクトリの中に置いてありました。
プログラム上でパス指定にはApplication.dataPathを使用し,
Application.dataPath+"/ProcessScripts/hoge.bat"
のようにしていました。
この場合,
UnityでPlayボタンを押して実行した場合, このパスは以下のようになっています。
C:/~/hogeProject/Assets/ProcessScripts/hoge.bat
しかし, ビルドしたプログラムで実行した場合は以下のようになっていました。
C:/~/hogeProject/hogeProject_Data/ProcessScripts/hoge.bat
なんか変わっている...
解決
調べていくとAssetsディレクトリ内のStreamingAssetsというディレクトリの
中のものだけビルド時にhogeProject_Dataというディレクトリへ移動されて
ビルド後にも使えるそうです。
ということでAssetsディレクトリ内にStreamingAssetsディレクトリを作成し,
batファイルが入ったProcessScriptsディレクトリごと移動させました。
移動後のパス指定では
Application.dataPath+"/StreamingAssets/ProcessScripts/hoge.bat"
のようにしました。
これでビルド後もきちんと呼び出されるようになりました。
まとめ
プログラムから直接指定するファイルはStreamingAssetsの中に
入れておく必要があるということですね。