Przeglądaj źródła

1.加入ILRuntime Package
2.参考焦先生,字母哥的项目,使用AssemblyBuilder把4个程序集编译成一个,方便后面ILRuntime加载

tanghai 4 lat temu
rodzic
commit
cc6225c5ff

+ 4 - 6
.gitignore

@@ -56,9 +56,7 @@ Server/.DS_Store
 /Unity/Unity.Model.csproj
 /Unity/Unity.ModelView.csproj
 /Unity/Unity.ThirdParty.csproj
-/Unity/Assets/Bundles/Lua/ModelView
-/Unity/Assets/Bundles/Lua/Hotfix
-/Unity/Assets/Bundles/Lua/HotfixView
-/Unity/Assets/Bundles/Lua/Model
-/Unity/Assets/Mono/XLua/Gen
-/Unity/Assets/Res/Code
+/Unity/Assets/Bundles/Code/Code.dll.bytes
+/Unity/Assets/Bundles/Code/Code.dll.bytes.meta
+/Unity/Assets/Bundles/Code/Code.pdb.bytes
+/Unity/Assets/Bundles/Code/Code.pdb.bytes.meta

+ 1 - 1
Unity/Assets/Res/Code.meta → Unity/Assets/Bundles/Code.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 46a3740a1fdc953418124c30ec457c84
+guid: 55d9010d6a87934468703901aa518c85
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 128 - 0
Unity/Assets/Editor/BuildEditor/BuildAssemblieEditor.cs

@@ -0,0 +1,128 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Compilation;
+
+namespace ET
+{
+    public static class BuildAssemblieEditor
+    {
+        private const string ScriptAssembliesDir = "Temp/MyAssembly/";
+        private const string CodeDir = "Assets/Res/Code/";
+
+        [MenuItem("Tools/BuildDll")]
+        public static void BuildDll()
+        {
+            BuildAssemblieEditor.BuildMuteAssembly("Code", new []
+            {
+                "Assets/Model/",
+                "Assets/ModelView/",
+                "Assets/Hotfix/",
+                "Assets/HotfixView/"
+            });
+            AssetDatabase.Refresh();
+        }
+
+        private static void CopyDllAndPdb(string FileName)
+        {
+            Debug.Log("复制Code.dll到Bundles/Code目录");
+            Directory.CreateDirectory(CodeDir);
+            File.Copy(Path.Combine(ScriptAssembliesDir, FileName + ".dll"), Path.Combine(CodeDir, FileName + ".dll.bytes"), true);
+            File.Copy(Path.Combine(ScriptAssembliesDir, FileName + ".pdb"), Path.Combine(CodeDir, FileName + ".pdb.bytes"), true);
+        }
+
+        private static void BuildMuteAssembly(string Name, string[] CodeDirectorys)
+        {
+            List<string> Scripts = new List<string>();
+            for (int i = 0; i < CodeDirectorys.Length; i++)
+            {
+                DirectoryInfo dti = new DirectoryInfo(CodeDirectorys[i]);
+                FileInfo[] fileInfos = dti.GetFiles("*.cs", System.IO.SearchOption.AllDirectories);
+                for (int j = 0; j < fileInfos.Length; j++)
+                {
+                    Scripts.Add(fileInfos[j].FullName);
+                }
+            }
+
+            string outputAssembly = "Temp/MyAssembly/" + Name + ".dll";
+
+            Directory.CreateDirectory("Temp/MyAssembly");
+
+            AssemblyBuilder assemblyBuilder = new AssemblyBuilder(outputAssembly, Scripts.ToArray());
+
+            //启用UnSafe
+            assemblyBuilder.compilerOptions.AllowUnsafeCode = true;
+
+            BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
+
+            assemblyBuilder.compilerOptions.ApiCompatibilityLevel = PlayerSettings.GetApiCompatibilityLevel(buildTargetGroup);
+            // assemblyBuilder.compilerOptions.ApiCompatibilityLevel = ApiCompatibilityLevel.NET_4_6;
+
+            assemblyBuilder.flags = AssemblyBuilderFlags.None;
+            //AssemblyBuilderFlags.None                 正常发布
+            //AssemblyBuilderFlags.DevelopmentBuild     开发模式打包
+            //AssemblyBuilderFlags.EditorAssembly       编辑器状态
+
+            assemblyBuilder.referencesOptions = ReferencesOptions.UseEngineModules;
+
+            assemblyBuilder.buildTarget = EditorUserBuildSettings.activeBuildTarget;
+
+            assemblyBuilder.buildTargetGroup = buildTargetGroup;
+
+            //添加额外的宏定义
+            // assemblyBuilder.additionalDefines = new[]
+            // {
+            //     ""
+            // };
+
+            //需要排除自身的引用
+            assemblyBuilder.excludeReferences = new[]
+            {
+                "Library/ScriptAssemblies/Unity.Model.dll", 
+                "Library/ScriptAssemblies/Unity.ModelView.dll",
+                "Library/ScriptAssemblies/Unity.Hotfix.dll", 
+                "Library/ScriptAssemblies/Unity.HotfixView.dll"
+            };
+
+            assemblyBuilder.buildStarted += delegate(string assemblyPath) { Debug.LogFormat("程序集开始构建:" + assemblyPath); };
+
+            assemblyBuilder.buildFinished += delegate(string assemblyPath, CompilerMessage[] compilerMessages)
+            {
+                int errorCount = compilerMessages.Count(m => m.type == CompilerMessageType.Error);
+                int warningCount = compilerMessages.Count(m => m.type == CompilerMessageType.Warning);
+
+                Debug.LogFormat("程序集构建完成:" + assemblyPath);
+                Debug.LogFormat("Warnings: {0} - Errors: {1}", warningCount, errorCount);
+
+                if (warningCount > 0)
+                {
+                    Debug.LogFormat("有{0}个Warning!!!", warningCount);
+                }
+
+                if (errorCount > 0)
+                {
+                    for (int i = 0; i < compilerMessages.Length; i++)
+                    {
+                        if (compilerMessages[i].type == CompilerMessageType.Error)
+                        {
+                            Debug.LogError(compilerMessages[i].message);
+                        }
+                    }
+
+                    return;
+                }
+                
+                CopyDllAndPdb(Name);
+            };
+
+            //开始构建
+            if (!assemblyBuilder.Build())
+            {
+                Debug.LogErrorFormat("构建程序集失败:" + assemblyBuilder.assemblyPath);
+            }
+        }
+    }
+}

+ 11 - 0
Unity/Assets/Editor/BuildEditor/BuildAssemblieEditor.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: db39c7b028ad96444bec9e439e89d35e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 7 - 25
Unity/Assets/Mono/MonoBehaviour/Init.cs

@@ -25,35 +25,17 @@ namespace ET
 
 			Assembly modelAssembly = null;
 
-			if (Define.IsEditor)
+			UnityEngine.Debug.Log("unity editor mode!");
+			foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
 			{
-				UnityEngine.Debug.Log("unity editor mode!");
-				foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
+				string assemblyName = $"{assembly.GetName().Name}.dll";
+				if (assemblyName != "Unity.ModelView.dll")
 				{
-					string assemblyName = $"{assembly.GetName().Name}.dll";
-					if (assemblyName != "Unity.ModelView.dll")
-					{
-						continue;
-					}
-
-					modelAssembly = assembly;
-					break;
+					continue;
 				}
-			}
-			else
-			{
-				UnityEngine.Debug.Log("unity standalone mode!");
-				foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
-				{
-					string assemblyName = $"{assembly.GetName().Name}.dll";
-					if (assemblyName != "Unity.ModelView.dll")
-					{
-						continue;
-					}
 
-					modelAssembly = assembly;
-					break;
-				}
+				modelAssembly = assembly;
+				break;
 			}
 
 			Type initType = modelAssembly.GetType("ET.MonoEntry");

+ 3 - 70
Unity/Assets/Scenes/Init.unity

@@ -38,12 +38,12 @@ RenderSettings:
   m_ReflectionIntensity: 1
   m_CustomReflection: {fileID: 0}
   m_Sun: {fileID: 0}
-  m_IndirectSpecularColor: {r: 0.3731193, g: 0.38073996, b: 0.35872698, a: 1}
+  m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.3587274, a: 1}
   m_UseRadianceAmbientProbe: 0
 --- !u!157 &3
 LightmapSettings:
   m_ObjectHideFlags: 0
-  serializedVersion: 12
+  serializedVersion: 11
   m_GIWorkflowMode: 0
   m_GISettings:
     serializedVersion: 2
@@ -98,7 +98,7 @@ LightmapSettings:
     m_TrainingDataDestination: TrainingData
     m_LightProbeSampleCountMultiplier: 4
   m_LightingDataAsset: {fileID: 0}
-  m_LightingSettings: {fileID: 94338416}
+  m_UseShadowmask: 0
 --- !u!196 &4
 NavMeshSettings:
   serializedVersion: 2
@@ -118,72 +118,9 @@ NavMeshSettings:
     manualTileSize: 0
     tileSize: 256
     accuratePlacement: 0
-    maxJobWorkers: 0
-    preserveTilesOutsideBounds: 0
     debug:
       m_Flags: 0
   m_NavMeshData: {fileID: 0}
---- !u!850595691 &94338416
-LightingSettings:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: Settings.lighting
-  serializedVersion: 3
-  m_GIWorkflowMode: 0
-  m_EnableBakedLightmaps: 1
-  m_EnableRealtimeLightmaps: 1
-  m_RealtimeEnvironmentLighting: 1
-  m_BounceScale: 1
-  m_AlbedoBoost: 1
-  m_IndirectOutputScale: 1
-  m_UsingShadowmask: 0
-  m_BakeBackend: 0
-  m_LightmapMaxSize: 1024
-  m_BakeResolution: 40
-  m_Padding: 2
-  m_TextureCompression: 1
-  m_AO: 0
-  m_AOMaxDistance: 1
-  m_CompAOExponent: 0
-  m_CompAOExponentDirect: 0
-  m_ExtractAO: 0
-  m_MixedBakeMode: 1
-  m_LightmapsBakeMode: 1
-  m_FilterMode: 1
-  m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
-  m_ExportTrainingData: 0
-  m_TrainingDataDestination: TrainingData
-  m_RealtimeResolution: 2
-  m_ForceWhiteAlbedo: 0
-  m_ForceUpdates: 0
-  m_FinalGather: 0
-  m_FinalGatherRayCount: 1024
-  m_FinalGatherFiltering: 1
-  m_PVRCulling: 1
-  m_PVRSampling: 1
-  m_PVRDirectSampleCount: 32
-  m_PVRSampleCount: 500
-  m_PVREnvironmentSampleCount: 500
-  m_PVREnvironmentReferencePointCount: 2048
-  m_LightProbeSampleCountMultiplier: 4
-  m_PVRBounces: 2
-  m_PVRMinBounces: 2
-  m_PVREnvironmentMIS: 0
-  m_PVRFilteringMode: 2
-  m_PVRDenoiserTypeDirect: 0
-  m_PVRDenoiserTypeIndirect: 0
-  m_PVRDenoiserTypeAO: 0
-  m_PVRFilterTypeDirect: 0
-  m_PVRFilterTypeIndirect: 0
-  m_PVRFilterTypeAO: 0
-  m_PVRFilteringGaussRadiusDirect: 1
-  m_PVRFilteringGaussRadiusIndirect: 5
-  m_PVRFilteringGaussRadiusAO: 2
-  m_PVRFilteringAtrousPositionSigmaDirect: 0.5
-  m_PVRFilteringAtrousPositionSigmaIndirect: 2
-  m_PVRFilteringAtrousPositionSigmaAO: 1
 --- !u!1 &251107983
 GameObject:
   m_ObjectHideFlags: 0
@@ -261,7 +198,6 @@ MonoBehaviour:
   m_FallbackScreenDPI: 96
   m_DefaultSpriteDPI: 96
   m_DynamicPixelsPerUnit: 1
-  m_PresetInfoIsWorld: 0
 --- !u!223 &251107987
 Canvas:
   m_ObjectHideFlags: 0
@@ -426,7 +362,6 @@ MonoBehaviour:
   m_FallbackScreenDPI: 96
   m_DefaultSpriteDPI: 96
   m_DynamicPixelsPerUnit: 1
-  m_PresetInfoIsWorld: 0
 --- !u!223 &493985073
 Canvas:
   m_ObjectHideFlags: 0
@@ -617,7 +552,6 @@ MonoBehaviour:
   m_FallbackScreenDPI: 96
   m_DefaultSpriteDPI: 96
   m_DynamicPixelsPerUnit: 1
-  m_PresetInfoIsWorld: 0
 --- !u!223 &872594943
 Canvas:
   m_ObjectHideFlags: 0
@@ -808,7 +742,6 @@ MonoBehaviour:
   m_FallbackScreenDPI: 96
   m_DefaultSpriteDPI: 96
   m_DynamicPixelsPerUnit: 1
-  m_PresetInfoIsWorld: 0
 --- !u!223 &1439952252
 Canvas:
   m_ObjectHideFlags: 0

+ 1 - 0
Unity/Packages/manifest.json

@@ -1,5 +1,6 @@
 {
   "dependencies": {
+    "com.ourpalm.ilruntime": "1.6.7",
     "com.unity.2d.sprite": "1.0.0",
     "com.unity.2d.tilemap": "1.0.0",
     "com.unity.assetbundlebrowser": "1.7.0",