コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】StreamingAssets にファイルをコピーする時は .meta を一緒に作るとインポート時間を短縮できる

検証内容

f:id:baba_s:20220112091411p:plain

10,000 個のファイルを

f:id:baba_s:20220112091446p:plain

StreamingAssets にコピーする時に

[MenuItem( "Tools/Copy Files" )]
private static void CopyFiles()
{
    AssetDatabase.StartAssetEditing();

    foreach ( var path in Directory.GetFiles( "Files" ) )
    {
        var filename = Path.GetFileName( path );
        File.Copy( path, $"Assets/StreamingAssets/{filename}" );
    }

    AssetDatabase.StopAssetEditing();
    AssetDatabase.Refresh();
}

上記のようなコードでコピーすると 92 秒 ほどインポートに時間がかかるが

[MenuItem( "Tools/Copy Files" )]
private static void CopyFiles()
{
    AssetDatabase.StartAssetEditing();

    foreach ( var path in Directory.GetFiles( "Files" ) )
    {
        var filename = Path.GetFileName( path );
        File.Copy( path, $"Assets/StreamingAssets/{filename}" );

        // .meta を構成する文字列を生成
        var content = $@"fileFormatVersion: 2
guid: {Guid.NewGuid():N}
DefaultImporter:
externalObjects: {{}}
userData:
assetBundleName:
assetBundleVariant: ";

        // StreamingAssets にコピーしたファイルの .meta を作成
        File.WriteAllText( $"Assets/StreamingAssets/{filename}.meta", content );
    }

    AssetDatabase.StopAssetEditing();
    AssetDatabase.Refresh();
}

StreamingAssets にファイルをコピーする時に一緒に .meta を作ってあげると
インポートにかかる時間が 26 秒 ほどまで短縮できる

関連記事