UnityWebRequestでローカルファイルをコピーしたらサイズが0になる
UnityWebRequestによってローカルのファイルを別のパスへコピーできる
例えばstreamingAssetsをpersistentDataへコピーする場合は以下のような処理
var src = $"{Application.streamingAssetsPath}/src.bytes" var tgt = $"{Application. persistentDataPath}/tgt.bytes" var uwr = new UnityWebRequest(src) uwr.downloadHandler = new DownloadHandlerFile(tgt); uwr.SendWebRequest(); ...
この際にpersistentDataPath直下にできたtgt.bytesを見るとサイズが0だった
原因はとても単純で、file://のつけ忘れ
UnityWebRequestでローカルファイルを扱う場合はプロトコルを指定する必要があった
なので上記の例の場合はこれでうまくいくようになった
var src = $"file://{Application.streamingAssetsPath}/src.bytes" ...
ちなみにstreamingAssetsPathを使う場合、↑だとandroidで動かない
原因はandroidでは "jar:file://" + Application.dataPath + "!/assets"
という特殊なパスに変換されるため
Streaming Assets - Unity マニュアル
なので例えば以下のようにfile://を除く
#if !UNITY_ANDROID || UNITY_EDITOR var src = $"file://{Application.streamingAssetsPath}/src.bytes" #else var src = $"{Application.streamingAssetsPath}/src.bytes" #endif
build settingsにてandroidが選択されている場合、editor上でもUNITY_ANDROIDが定義される。 それだとeditor上で動かなくなってしまうのでUNITY_EDITORも含めている