我正在从模板创建一个新脚本。但是,在程序集有机会重新编译之前,无法访问这种新的脚本类型。我正在尝试创建新 ScriptableObject 的实例,以便通过代码生成它。
public override void Def()
{
NewAssetName = EditorGUILayout.TextField(NewAssetName);
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Add"))
{
TemplateLines = File.ReadAllLines("E:/Unity/Editor/Data/Resources/ScriptTemplates/NewScriptableObject.cs.txt");
for (int i = 0; i < TemplateLines.Length; i++)
{
if (TemplateLines[i].Contains("#SCRIPTNAME#"))
{
TemplateLines[i] = TemplateLines[i].Replace("#SCRIPTNAME#", NewAssetName);
}
}
NewFilePath = "Assets/" + NewAssetName + '/' + NewAssetName + ".cs";
NewSOPath = "Assets/" + NewAssetName + '/' + NewAssetName + ".asset";
File.WriteAllLines(NewFilePath, TemplateLines);
ScriptableObject NewSO = CreateInstance(TypeName);
AssetDatabase.CreateAsset(NewSO, NewSOPath);
}
一切正常,直到我使用 CreateInstance(); 此时,该类型还不存在。我必须等待大会重新编译并投降类型......
我在谷歌上搜索了刷新大会的概念,但没有找到任何东西。
我还使用 async/await 谷歌搜索,以延迟调用 CreateInstance(),直到在程序集之后,肯定有新类型......到目前为止,这些尝试要么锁定了编辑器,要么没有按预期工作...(我是 C# 中这种异步风格的新手)
我对解决此问题的组装解决方案或异步解决方案持开放态度。