做手游开始阶段可能要频繁的打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