1556

[code]

                string resFile = "test";
                string outFile = Application.dataPath + "/Resources/" + resFile;
                for (int i = 0; i < 2; i++)
                { // data write.
                    byte[] data = new byte[i == 0 ? 16 : 200];
                    File.WriteAllBytes(outFile + ".bytes", data);
                    AssetDatabase.Refresh(); // refresh
                }
                TextAsset byteAsset = Resources.Load(resFile) as TextAsset;
                Debug.Log(byteAsset.bytes.Length);
    
[/code]

上記のコードの期待する結果としては最後のLog表示に200が帰ってきてほしいのですが16が返ってきます。

以下の様にAssetDatabaseの呼び出しをループの外に出して最後に1度だけ呼ぶようにしてやれば期待する200の値が返ってくるようになりました。

[code]

                    File.WriteAllBytes(outFile + ".bytes", data);
                }
                AssetDatabase.Refresh(); // refresh
                TextAsset byteAsset = Resources.Load(resFile) as TextAsset;
                Debug.Log(byteAsset.bytes.Length);
    
[/code]

AssetDatabase.Refresh();は遅延のあるAPIなのでしょうか？
※遅延つきかと思った理由として、最初のコードのRefreshの前に1秒waitを入れたら期待値が返きた為です。

この症状はUnity 4.5で確認しました。


CC BY-SA 3.0
2014-12-12T13:59:45.550
1555
2014-12-13T00:42:47.563
2014-12-13T00:42:47.563
2129
2129
question
unity3d
同一ファイル内容を変更してAssetDatabase.Refresh()を連続して呼び出した時の問題


Unity5(beta)で試してみたところ、本件の問題が発生しなくなっていました。


CC BY-SA 3.0
2014-12-12T14:01:00.510
1556
2014-12-13T00:41:50.807
2014-12-13T00:41:50.807
2129
2129
1555
answer