首页 >Unity3D频道 >【Unity3D研究院之游戏开发】 > Unity3D研究院之MAC打包Windows包自动压缩成一个Zip文件(八十三)
2015
08-24

Unity3D研究院之MAC打包Windows包自动压缩成一个Zip文件(八十三)

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

 

Snip20150824_1

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之MAC打包Windows包自动压缩成一个Zip文件(八十三)》有 12 条评论

  1. 小晓说:

    你好,这生成结果是要有什么软件要求吗,build failed

  2. 于浦说:

    momo。我想问下,这个脚本能不能在window下运行呢?

  3. ron说:

    大神,《Unity3D 游戏开发》一书中 3.3.4实例–用Unity开发2D游戏 的例子在unity 5下运行出错,不知道是版本关系,还是例子本身有问题。

留下一个回复

你的email不会被公开。 必填项已用 * 标注。