做手游开始阶段可能要频繁的打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
|
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
|
#!/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上,这样就方便多了,欢迎大家测试。