Procházet zdrojové kódy

增加Unity编辑器编译热更dll功能,增加打包命令

tanghai před 8 roky
rodič
revize
bbd765650f

+ 3 - 0
Unity/Assets/Editor/BuildEditor.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: eab6524185f247a78b3320f9d6a3eed5
+timeCreated: 1503647600

+ 163 - 0
Unity/Assets/Editor/BuildEditor/BuildEditor.cs

@@ -0,0 +1,163 @@
+using System.IO;
+using Model;
+using Newtonsoft.Json;
+using UnityEditor;
+
+namespace MyEditor
+{
+	public class BuildEditor : EditorWindow
+	{
+		private static BuildOptions option = BuildOptions.Development | BuildOptions.AllowDebugging;
+		private const string relativeDirPrefix = "../Release";
+
+		public static string abFolderAndroid = "../Release/Android/StreamingAssets/";
+
+		public static string abFolderPC = "../Release/PC/StreamingAssets/";
+
+		public static string abFolderIOS = "../Release/IOS/StreamingAssets/";
+
+		[MenuItem("Tools/编译")]
+		public static void BuildHotfix()
+		{
+			System.Diagnostics.Process process = new System.Diagnostics.Process();
+			string unityDir = System.Environment.GetEnvironmentVariable("Unity");
+			process.StartInfo.FileName = $@"{unityDir}\Editor\Data\MonoBleedingEdge\bin\mono.exe";
+			process.StartInfo.Arguments = $@"{unityDir}\Editor\Data\MonoBleedingEdge\lib\mono\xbuild\14.0\bin\xbuild.exe .\Hotfix\Unity.Hotfix.csproj";
+			process.StartInfo.UseShellExecute = false;
+			process.StartInfo.WorkingDirectory = @".\";
+			process.StartInfo.RedirectStandardOutput = true;
+			process.StartInfo.RedirectStandardError = true;
+			process.Start();
+			string info = process.StandardOutput.ReadToEnd();
+			process.WaitForExit();
+			process.Close();
+			Log.Info(info);
+		}
+
+		[MenuItem("Tools/打开文件服务器")]
+		public static void OpenFileServer()
+		{
+			string currentDir = System.Environment.CurrentDirectory;
+			string path = Path.Combine(currentDir, @"..\FileServer\");
+			System.Diagnostics.Process process = new System.Diagnostics.Process();
+			process.StartInfo.FileName = "FileServer.exe";
+			process.StartInfo.WorkingDirectory = path;
+			process.StartInfo.CreateNoWindow = true;
+			process.Start();
+		}
+
+		[MenuItem("Tools/打包/PC打包")]
+		public static void BuildPC()
+		{
+			BuildAssetBundlesPC();
+
+			string[] levels2 = {
+				"Assets/Scenes/Init.unity",
+			};
+			BuildPipeline.BuildPlayer(levels2, $"{relativeDirPrefix}/football.exe", BuildTarget.StandaloneWindows, option);
+			Log.Info("打包完成");
+		}
+
+		[MenuItem("Tools/打包/Android打包")]
+		public static void BuildAndroid()
+		{
+			BuildAssetBundlesAndroid();
+
+			string[] levels2 = {
+				"Assets/Scenes/Init.unity",
+			};
+			BuildPipeline.BuildPlayer(levels2, $"{relativeDirPrefix}/football.apk", BuildTarget.Android, option);
+			Log.Info("打包完成");
+		}
+
+		[MenuItem("Tools/打包/Android打包APK")]
+		public static void BuildAPK()
+		{
+			string[] levels2 = {
+				"Assets/Scenes/Init.unity",
+			};
+			BuildPipeline.BuildPlayer(levels2, $"{relativeDirPrefix}/football.apk", BuildTarget.Android, option);
+			Log.Info("打包APK完成");
+		}
+
+		[MenuItem("Tools/打包/PC生成资源包")]
+		public static void BuildAssetBundlesPC()
+		{
+			if (!Directory.Exists(abFolderPC))
+			{
+				Directory.CreateDirectory(abFolderPC);
+			}
+			BuildPipeline.BuildAssetBundles(abFolderPC, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
+
+			GenerateVersionInfo(abFolderPC);
+			Log.Info("生成资源包完成");
+		}
+
+		[MenuItem("Tools/打包/Android生成资源包")]
+		public static void BuildAssetBundlesAndroid()
+		{
+			if (!Directory.Exists(abFolderAndroid))
+			{
+				Directory.CreateDirectory(abFolderAndroid);
+			}
+			BuildPipeline.BuildAssetBundles(abFolderAndroid, BuildAssetBundleOptions.None, BuildTarget.Android);
+
+			GenerateVersionInfo(abFolderAndroid);
+			Log.Info("生成资源包完成");
+		}
+
+		[MenuItem("Tools/打包/IOS生成资源包")]
+		public static void BuildAssetBundlesIOS()
+		{
+			if (!Directory.Exists(abFolderIOS))
+			{
+				Directory.CreateDirectory(abFolderIOS);
+			}
+			BuildPipeline.BuildAssetBundles(abFolderIOS, BuildAssetBundleOptions.None, BuildTarget.iOS);
+
+			GenerateVersionInfo(abFolderIOS);
+			Log.Info("生成资源包完成");
+		}
+
+		private static void GenerateVersionInfo(string dir)
+		{
+			VersionConfig versionProto = new VersionConfig();
+			GenerateVersionInfo3(dir, versionProto, "");
+
+			using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
+			{
+				byte[] bytes = JsonConvert.SerializeObject(versionProto).ToByteArray();
+				fileStream.Write(bytes, 0, bytes.Length);
+			}
+		}
+
+		private static void GenerateVersionInfo3(string dir, VersionConfig versionProto, string relativePath)
+		{
+			foreach (string file in Directory.GetFiles(dir))
+			{
+				if (file.EndsWith(".manifest"))
+				{
+					continue;
+				}
+				string md5 = MD5Helper.FileMD5(file);
+				FileInfo fi = new FileInfo(file);
+				long size = fi.Length;
+				string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";
+
+				versionProto.FileVersionInfos.Add(new FileVersionInfo
+				{
+					File = filePath,
+					MD5 = md5,
+					Size = size,
+				});
+			}
+
+			foreach (string directory in Directory.GetDirectories(dir))
+			{
+				DirectoryInfo dinfo = new DirectoryInfo(directory);
+				string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
+				GenerateVersionInfo3($"{dir}/{dinfo.Name}", versionProto, rel);
+			}
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Editor/BuildEditor/BuildEditor.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 53b50d5bc43bd1449b2ab7a3e536154f
+timeCreated: 1503647642
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 4
Unity/Unity.Editor.csproj

@@ -12,12 +12,15 @@
     <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
     <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
-    <CompilerResponseFile></CompilerResponseFile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <CompilerResponseFile>
+    </CompilerResponseFile>
     <UnityProjectType>Editor:5</UnityProjectType>
     <UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>
     <UnityVersion>2017.1.0f3</UnityVersion>
-    <RootNamespace></RootNamespace>
+    <RootNamespace>
+    </RootNamespace>
     <LangVersion>6</LangVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -168,6 +171,7 @@
     <Compile Include="Assets\Editor\BehaviorTreeEditor\NodeMeta.cs" />
     <Compile Include="Assets\Editor\BehaviorTreeEditor\NodeMetaHelper.cs" />
     <Compile Include="Assets\Editor\BehaviorTreeEditor\PropertyDesigner.cs" />
+    <Compile Include="Assets\Editor\BuildEditor\BuildEditor.cs" />
     <Compile Include="Assets\Editor\ExportNavmesh.cs" />
     <Compile Include="Assets\Editor\ReferenceCollectorEditor\ReferenceCollectorEditor.cs" />
     <Compile Include="Assets\Editor\RsyncEditor\RsyncConfig.cs" />
@@ -223,4 +227,4 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="GenerateTargetFrameworkMonikerAttribute" />
-</Project>
+</Project>