public void DrawILRuntime() { #if ILRuntime GUILayout.BeginHorizontal("HelpBox"); EditorGUILayout.LabelField("== ILRuntime =="); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("生成Dll", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.GenDll(); } if (GUILayout.Button("打包dll为ab", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.BuildDllToAb(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("生成CLR绑定", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.GenerateCLRBindingByAnalysis(); } if (GUILayout.Button("生成适配器", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.GenerateCrossbindAdapter(); } if (GUILayout.Button("删除生成代码", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.ClearGenCode(); } GUILayout.EndHorizontal(); #endif }
/// <summary> /// return full path or build /// </summary> /// <param name="outputpath"></param> /// <param name="tag"></param> /// <param name="opt"></param> /// <returns></returns> private static string PerformBuild(string outputpath, BuildTargetGroup buildTargetGroup, BuildTarget tag, BuildOptions opt) { #if UNITY_2018_1_OR_NEWER EditorUserBuildSettings.SwitchActiveBuildTarget(buildTargetGroup, tag); #else EditorUserBuildSettings.SwitchActiveBuildTarget(tag); #endif //for release build min log output ,can modify PlayerSettings.SetStackTraceLogType(LogType.Error, StackTraceLogType.ScriptOnly); PlayerSettings.SetStackTraceLogType(LogType.Exception, StackTraceLogType.ScriptOnly); PlayerSettings.SetStackTraceLogType(LogType.Warning, StackTraceLogType.ScriptOnly); PlayerSettings.SetStackTraceLogType(LogType.Assert, StackTraceLogType.ScriptOnly); //建议所有的log.info日志前都要添加 if(AppConfig.isEditor)的判断,上线产品中关闭log。PS.不判断的话关闭输出后还有调用log接口传递字符串拼接的消耗 PlayerSettings.SetStackTraceLogType(LogType.Log, StackTraceLogType.ScriptOnly /*StackTraceLogType.None*/); if (AppConfig.IsDownloadRes && !File.Exists(AppConfig.VersionTextPath)) { Log.LogError("打包失败,可下载更新的包,需要先生成vresion.txt"); return(null); } //OnBeforeBuildPlayerEvent Unity引擎的打包前事件 ParseArgs(ref opt, ref outputpath); string fullPath = System.IO.Path.Combine(AppConfig.ProductRelPath, outputpath); string fullDir = System.IO.Path.GetDirectoryName(fullPath); if (!Directory.Exists(fullDir)) { Directory.CreateDirectory(fullDir); } Log.Info("Start Build Client {0} to: {1}", tag, Path.GetFullPath(fullPath)); #if xLua // NOTE xlua在编辑器开发模式不生成代码,因为.NET Standard 2.0不支持emit,会导致某些CSharpCallLua注册失败,Api要改成.Net4.X,在打包时如果有需要再修改回 // 需要先clear,再gen,避免同一个class修改后,覆盖gen会报错 XLua.DelegateBridge.Gen_Flag = true; CSObjectWrapEditor.Generator.ClearAll(); CSObjectWrapEditor.Generator.GenAll(); #elif ILRuntime ILRuntimeEditor.GenerateCLRBindingByAnalysis(); ILRuntimeEditor.GenerateCrossbindAdapter(); #endif var buildResult = BuildPipeline.BuildPlayer(GetScenePaths(), fullPath, tag, opt); #if xLua if (buildResult.summary.result == BuildResult.Succeeded) { CSObjectWrapEditor.Generator.ClearAll(); } #endif Log.Info("Build App result:{0} ,errors:{1}", buildResult.summary.result, buildResult.summary.totalErrors); return(fullPath); }
public void DrawILRuntime() { #if ILRuntime GUILayout.BeginHorizontal("HelpBox"); EditorGUILayout.LabelField("== ILRuntime =="); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("生成Dll", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.GenDll(); } if (GUILayout.Button("打包dll为ab", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.BuildDllToAb(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("生成CLR绑定", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.GenerateCLRBindingByAnalysis(); } if (GUILayout.Button("生成适配器", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.GenerateCrossbindAdapter(); } if (GUILayout.Button("删除生成代码", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { ILRuntimeEditor.ClearGenCode(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("开启调试", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { KDefineSymbolsHelper.AddDefineSymbols(new string[] { "ILRuntime", "DEBUG" }); } if (GUILayout.Button("默认设置", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { KDefineSymbolsHelper.AddDefineSymbols(new string[] { "ILRuntime" }); } if (GUILayout.Button("最佳性能", GUILayout.ExpandWidth(true), GUILayout.MaxHeight(30))) { KDefineSymbolsHelper.AddDefineSymbols(new string[] { "ILRuntime", "DISABLE_ILRUNTIME_DEBUG" }); } GUILayout.EndHorizontal(); #endif }
/// <summary> /// return full path or build /// </summary> /// <param name="outputpath"></param> /// <param name="tag"></param> /// <param name="opt"></param> /// <returns></returns> private static string PerformBuild(string outputpath, BuildTargetGroup buildTargetGroup, BuildTarget tag, BuildOptions opt) { #if UNITY_2018_1_OR_NEWER EditorUserBuildSettings.SwitchActiveBuildTarget(buildTargetGroup, tag); #else EditorUserBuildSettings.SwitchActiveBuildTarget(tag); #endif //已监听Unity引擎的打包前事件:OnBeforeBuildPlayerEvent ParseArgs(ref opt, ref outputpath); string fullPath = System.IO.Path.Combine(AppConfig.ProductRelPath, outputpath); string fullDir = System.IO.Path.GetDirectoryName(fullPath); if (!Directory.Exists(fullDir)) { Directory.CreateDirectory(fullDir); } Log.Info("Start Build Client {0} to: {1}", tag, Path.GetFullPath(fullPath)); #if xLua // NOTE xlua在编辑器开发模式不生成代码,因为.NET Standard 2.0不支持emit,会导致某些CSharpCallLua注册失败,Api要改成.Net4.X,在打包时如果有需要再修改回 // 需要先clear,再gen,避免同一个class修改后,覆盖gen会报错 XLua.DelegateBridge.Gen_Flag = true; CSObjectWrapEditor.Generator.ClearAll(); CSObjectWrapEditor.Generator.GenAll(); #elif ILRuntime ILRuntimeEditor.GenerateCLRBindingByAnalysis(); ILRuntimeEditor.GenerateCrossbindAdapter(); #endif var buildResult = BuildPipeline.BuildPlayer(GetScenePaths(), fullPath, tag, opt); #if xLua if (buildResult.summary.result == BuildResult.Succeeded) { CSObjectWrapEditor.Generator.ClearAll(); } #endif Log.Info("Build App result:{0} ,errors:{1}", buildResult.summary.result, buildResult.summary.totalErrors); return(fullPath); }