Unity Editor中[InitializeOnLoadMethod]后台多次执行异常问题
Unity Editor脚本异常问题:
[InitializeOnLoadMethod]被AssetImportWorker重复执行 使用Unity版本
2023.2.9f1
脚本说明
我编写了被[InitializeOnLoadMethod]标记的静态方法,会在Unity域重载时执行,用于在StreamingAssets文件夹创建文件。正常打开Unity或编辑脚本触发域重载时,控制台打印日志并生成一个文件,符合预期。
问题描述
执行以下步骤会稳定复现问题:
- 创建新场景
- 在检视窗口查看该场景
执行后,Unity控制台无新日志,但SyncWriteFile()方法被执行两次,生成两个新文件。我确认未在主线程触发显式域重载,该问题在主项目中造成严重影响。
经排查,问题与AssetImportWorker相关,在AssetImportWorker0.log和AssetImportWorker1.log中可见对应文件创建的日志。
代码示例
public static class TEST { [InitializeOnLoadMethod] private static void Init() { Debug.Log($"{DateTime.Now.Ticks} : INIT Start"); AssemblyReloadEvents.afterAssemblyReload += AssemblyReloadEvents_afterAssemblyReload; SyncWriteFile(); Debug.Log($"{DateTime.Now.Ticks} : INIT End"); } private static void SyncWriteFile() { string path = Path.Combine(Application.streamingAssetsPath, $"test_{DateTime.Now.Ticks}"); Debug.Log($"{DateTime.Now.Ticks} : Creating file {path}"); File.Create(path); } private static void AssemblyReloadEvents_afterAssemblyReload() { Debug.Log($"{DateTime.Now.Ticks} : Assembly Reload"); } }
复现步骤演示

内容的提问来源于stack exchange,提问作者Eledwin
相关产品推荐
相关产品推荐

