diff --git a/Editor/Meta/MetaUtil.cs b/Editor/Meta/MetaUtil.cs index 167cc15..233ff88 100644 --- a/Editor/Meta/MetaUtil.cs +++ b/Editor/Meta/MetaUtil.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEditor; namespace HybridCLR.Editor.Meta { @@ -119,10 +120,30 @@ namespace HybridCLR.Editor.Meta return typeSigs.Select(s => ToShareTypeSig(s)).ToList(); } - public static IAssemblyResolver CreateBuildTargetAssemblyResolver(UnityEditor.BuildTarget target) + public static IAssemblyResolver CreateHotUpdateAssemblyResolver(BuildTarget target) { - return new CombinedAssemblyResolver(new PathAssemblyResolver( - SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target)), + var externalDirs = HybridCLRSettings.Instance.externalHotUpdateAssembliyDirs; + var defaultHotUpdateOutputDir = SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target); + if (externalDirs == null || externalDirs.Length == 0) + { + return new PathAssemblyResolver(defaultHotUpdateOutputDir); + } + else + { + var externalDirList = new List(); + foreach (var dir in externalDirs) + { + externalDirList.Add($"{dir}/{target}"); + externalDirList.Add(dir); + } + externalDirList.Add(defaultHotUpdateOutputDir); + return new PathAssemblyResolver(externalDirList.ToArray()); + } + } + + public static IAssemblyResolver CreateBuildTargetAssemblyResolver(BuildTarget target) + { + return new CombinedAssemblyResolver(CreateHotUpdateAssemblyResolver(target), new UnityPluginAssemblyResolver(), new UnityDotNetAOTAssemblyResolver(), new UnityEditorAssemblyResolver()); diff --git a/Editor/Settings/HybridCLRSettingProvider.cs b/Editor/Settings/HybridCLRSettingProvider.cs index 237764d..2543937 100644 --- a/Editor/Settings/HybridCLRSettingProvider.cs +++ b/Editor/Settings/HybridCLRSettingProvider.cs @@ -17,6 +17,7 @@ namespace HybridCLR.Editor private SerializedProperty _hotUpdateAssemblies; private SerializedProperty _preserveHotUpdateAssemblies; private SerializedProperty _hotUpdateDllCompileOutputRootDir; + private SerializedProperty _externalHotUpdateAssembliyDirs; private SerializedProperty _strippedAOTDllOutputRootDir; private SerializedProperty _patchAOTAssemblies; private SerializedProperty _differentialHybridAssemblies; @@ -46,6 +47,7 @@ namespace HybridCLR.Editor _hotUpdateAssemblies = _serializedObject.FindProperty("hotUpdateAssemblies"); _preserveHotUpdateAssemblies = _serializedObject.FindProperty("preserveHotUpdateAssemblies"); _hotUpdateDllCompileOutputRootDir = _serializedObject.FindProperty("hotUpdateDllCompileOutputRootDir"); + _externalHotUpdateAssembliyDirs = _serializedObject.FindProperty("externalHotUpdateAssembliyDirs"); _strippedAOTDllOutputRootDir = _serializedObject.FindProperty("strippedAOTDllOutputRootDir"); _patchAOTAssemblies = _serializedObject.FindProperty("patchAOTAssemblies"); _differentialHybridAssemblies = _serializedObject.FindProperty("differentialHybridAssemblies"); @@ -136,6 +138,7 @@ namespace HybridCLR.Editor EditorGUILayout.PropertyField(_hotUpdateAssemblies); EditorGUILayout.PropertyField(_preserveHotUpdateAssemblies); EditorGUILayout.PropertyField(_hotUpdateDllCompileOutputRootDir); + EditorGUILayout.PropertyField(_externalHotUpdateAssembliyDirs); EditorGUILayout.PropertyField(_strippedAOTDllOutputRootDir); EditorGUILayout.PropertyField(_patchAOTAssemblies); EditorGUILayout.PropertyField(_differentialHybridAssemblies); diff --git a/Editor/Settings/HybridCLRSettings.cs b/Editor/Settings/HybridCLRSettings.cs index 2a7f0a0..d926b69 100644 --- a/Editor/Settings/HybridCLRSettings.cs +++ b/Editor/Settings/HybridCLRSettings.cs @@ -29,6 +29,9 @@ namespace HybridCLR.Editor [Header("热更新dll编译输出根目录")] public string hotUpdateDllCompileOutputRootDir = "HybridCLRData/HotUpdateDlls"; + [Header("外部热更新dll搜索路径")] + public string[] externalHotUpdateAssembliyDirs; + [Header("裁减后AOT dll输出根目录")] public string strippedAOTDllOutputRootDir = "HybridCLRData/AssembliesPostIl2CppStrip"; @@ -39,7 +42,7 @@ namespace HybridCLR.Editor public string[] differentialHybridAssemblies; [Header("差分混合热更新配置数据输出目录")] - public string differentialHybridOptionOutputDir = "Assets/StreamingAssets"; + public string differentialHybridOptionOutputDir = "HybridCLRData/DifferentialHybridOptionDatas"; [Header("生成link.xml时扫描asset中引用的类型")] public bool collectAssetReferenceTypes; @@ -53,9 +56,6 @@ namespace HybridCLR.Editor [Header("AOT泛型实例化搜索迭代次数")] public int maxGenericReferenceIteration = 10; - //[Header("预留MonoPInvokeCallbackAttribute函数个数")] - //public int ReversePInvokeWrapperCount = 10; - [Header("MethodBridge泛型搜索迭代次数")] public int maxMethodBridgeGenericIteration = 10; } diff --git a/package.json b/package.json index 66a9741..18c1324 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.focus-creative-games.hybridclr_unity", - "version": "1.1.3", + "version": "1.1.4", "displayName": "HybridCLR", "description": "Unity package for HybridCLR. It includes editor and runtime scripts and assets for HybridCLR", "category": "Runtime",