在ET8中使用之前项目的战斗部分逻辑,因逻辑很独立,没有想转成ECS的模式,所以想单独增加一个热更的Assembly,
增加了AssemblyTool的DllNames
public static readonly string[] DllNames = { "Sg.Battle", "Unity.Hotfix", "Unity.HotfixView", "Unity.Model", "Unity.ModelView" };
增加了HybirdCLR的Hotfix列表,
在CodeLoader.cs中,LoadHotfix()函数里面增加了以下代码
byte[] hotfixAssBytes;
byte[] hotfixPdbBytes;
byte[] hotfixViewAssBytes;
byte[] hotfixViewPdbBytes;
byte[] sgBattleAssBytes;
byte[] sgBattlePdbBytes;
3种加载方式,都增加了load Assembly
hotfixAssembly = Assembly.Load(hotfixAssBytes, hotfixPdbBytes); hotfixViewAssembly = Assembly.Load(hotfixViewAssBytes, hotfixViewPdbBytes); sgBattleAssembly = Assembly.Load(sgBattleAssBytes, sgBattlePdbBytes);
同时修改了外层Start中的执行函数
(Assembly hotfixAssembly, Assembly hotfixViewAssembly, Assembly sgBattleAssembly) = this.LoadHotfix(); World.Instance.SgBattleAss = sgBattleAssembly; World.Instance.AddSingleton<CodeTypes, Assembly[]>(new[] { typeof (World).Assembly, typeof (Init).Assembly, this.modelAssembly, this.modelViewAssembly, hotfixAssembly, hotfixViewAssembly, sgBattleAssembly });
现在的问题是,输出
Debug.Log($"Load Result: {(hotfixAssembly.GetName())} | {(hotfixViewAssembly.GetName())} | {(sgBattleAssembly.GetName())}");
能看到,
Load Result: Unity.Hotfix, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null | Unity.HotfixView, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null | Sg.Battle, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Assembly已经能加载成功了,
但是在HotfixView程序集中调用里面的函数时,
(HotfixView的.asmdef文件已经增加了对自己Assembly的references)
使用
Type battleGoScriptType = sgBattleAssembly.GetType("BattleGoScript");
会报错找不到
用
Type battleGoScriptType = sgBattleAssembly.GetTypes().FirstOrDefault(t => t.Name == "BattleGoScript");
能找到类型,但是执行的时候会报错
Script BattleGoScript has not finished compilation yet. Please wait until compilation of the script has finished and try again.
有大佬知道可能是哪里有问题么~
万分感谢