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も含めている