做手游开始阶段可能要频繁的打Windows包,主要是为了让策划看起来方便。但是Unity打包windows的时候会生成一个xxx.exe在生成一个xxx_Data文件夹 ,这就很恶心了。无论是上传SVN还是RTX传文件都很不方便,而且文件夹还会有冲突的可能。 我的想法是把这exe和Data压缩成一个zip包,这样就传递起来就方便多了。 可是问题就来了,我不想每次都手动来打zip包, 我希望是自动完成的。 我查了一下unity的api它没有提供这样的方法,那么我就自己来写喽。
我打包的平台是mac,这里我在mac上自动打包windows,并且实现压缩Zip包,如下代码所示,把BuildProject类放在Editor文件夹下。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50  | 
						using System.Collections; using System.IO; using UnityEditor; using UnityEngine; using System.Collections.Generic; using System; using System.IO.Compression; class BuildProject : Editor{ 	static string[] GetBuildScenes() 	{ 		List<string> names = new List<string>(); 		foreach(EditorBuildSettingsScene e in EditorBuildSettings.scenes) 		{ 			if(e==null) 				continue; 			if(e.enabled){ 				names.Add(e.path); 			} 		} 		return names.ToArray(); 	} 	static List<string> GetArgs(string methodName)  	{ 		string executeMethod = "BuildProject." + methodName; 		List<string> args = new List<string> (); 		bool isArg = false; 		foreach(string arg in System.Environment.GetCommandLineArgs()) { 			if(isArg) { 				args.Add(arg); 			}else if(arg == executeMethod) { 				isArg = true; 			} 		} 		return args; 	} 	//shell脚本调用此方法进行打包pc 	static void BuildForPC() 	{ 		List<string> args = GetArgs("BuildForPC"); 		if(string.IsNullOrEmpty(BuildPipeline.BuildPlayer(GetBuildScenes(),args[0], BuildTarget.StandaloneWindows,BuildOptions.None))){ 		} 	} }  | 
					
在shell脚本里调用unity这个方法BuildForPC进行打包。
build_pc.sh
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  | 
						#!/bin/sh #unity的安装目录# export untiy=/Applications/Unity/Unity.app/Contents/MacOS/Unity #游戏工程目录# export projectPath=/Users/MOMO/NewUnityProject  #输出后的包名# export name=project #exe目录# export exe=/Users/MOMO/Desktop/Game/${name}.exe echo "Unity PC ..." $untiy  -quit -batchmode -projectPath $projectPath -logFile /tmp/apk1.log -executeMethod BuildProject.BuildForPC ${exe} if [[ -f "$exe" ]]; then 	cd /Users/MOMO/Desktop/Game 	#开始进行zip压缩# 	zip -r project.zip ${name}.exe ${name}_Data 	#删除没用的.exe和_Data文件# 	rm -r ${name}.exe 	rm -r ${name}_Data else 	echo "Build FAILED !!!" 	exit fi  | 
					
如下图所示,zip包就压缩成功了。最后还可以用mv方法把生成的zip包拷贝或者上传上规定的目录或者svn上,这样就方便多了,欢迎大家测试。
- 本文固定链接: https://www.xuanyusong.com/archives/3601
 - 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
 
                        	捐  赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
                        
                        					

你好,这生成结果是要有什么软件要求吗,build failed
unity web player
momo。我想问下,这个脚本能不能在window下运行呢?
应该不行, 但是windows可以脚本执行rar
大神,《Unity3D 游戏开发》一书中 3.3.4实例–用Unity开发2D游戏 的例子在unity 5下运行出错,不知道是版本关系,还是例子本身有问题。
版本跨度太大了 可能有问题。。 而且现在开发2D游戏的方式也变了。。
hero.renderer.material.mainTexture = tex[nowFram]; 改成hero.GetComponent.().material.mainTexture = tex[nowFram]; 就好了。哦,原来2D已经不这样开发啦。。3年前买的书今天才看。。
 
感谢分享。
666