做手游开始阶段可能要频繁的打Windows包,主要是为了让策划看起来方便。但是Unity打包windows的时候会生成一个xxx.exe在生成一个xxx_Data文件夹 ,这就很恶心了。无论是上传SVN还是RTX传文件都很不方便,而且文件夹还会有冲突的可能。 我的想法是把这exe和Data压缩成一个zip包,这样就传递起来就方便多了。 可是问题就来了,我不想每次都手动来打zip包, 我希望是自动完成的。 我查了一下unity的api它没有提供这样的方法,那么我就自己来写喽。
我打包的平台是mac,这里我在mac上自动打包windows,并且实现压缩Zip包,如下代码所示,把BuildProject类放在Editor文件夹下。
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
#!/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