はじめに
エディタ拡張でスクリプトからマテリアルを 1,000 個作成する時に
AssetDatabase.StartAssetEditing を使う場合と使わない場合で
処理速度がどのくらい変わるか調査してみた
検証環境
- Windows 10
- Unity 2021.1.0f1
検証用スクリプト
AssetDatabase.StartAssetEditing を使う場合
using System.Diagnostics; using UnityEditor; using UnityEngine; using Debug = UnityEngine.Debug; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var stopwatch = Stopwatch.StartNew(); var shader = Shader.Find( "Sprites/Diffuse" ); AssetDatabase.StartAssetEditing(); for ( var i = 0; i < 1000; i++ ) { AssetDatabase.CreateAsset( new Material( shader ), $"Assets/Materials/{i}.mat" ); } AssetDatabase.StopAssetEditing(); AssetDatabase.Refresh(); stopwatch.Stop(); Debug.Log( stopwatch.Elapsed.TotalSeconds ); } }
AssetDatabase.StartAssetEditing を使わない場合
using System.Diagnostics; using UnityEditor; using UnityEngine; using Debug = UnityEngine.Debug; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var stopwatch = Stopwatch.StartNew(); var shader = Shader.Find( "Sprites/Diffuse" ); for ( var i = 0; i < 1000; i++ ) { AssetDatabase.CreateAsset( new Material( shader ), $"Assets/Materials/{i}.mat" ); } AssetDatabase.Refresh(); stopwatch.Stop(); Debug.Log( stopwatch.Elapsed.TotalSeconds ); } }
検証結果
AssetDatabase.StartAssetEditing を | かかった時間 |
---|---|
使う | 6.8秒 |
使わない | 38.3秒 |
AssetDatabase.StartAssetEditing を使うほうが処理が速くなる