最近一个已上线项目需要开发新的东西,并且它是在多个平台上线的。那么在日常的迭代开发过程中,设计和测试定时的需要一个当前最新的版本来查看游戏目前的一个开发状态,如果他们每个人都跑来找程序手动的打新版本,那么程序一天啥也不干就光给设计和测试打版本了。。。
于是我就写了一个.bat批处理利用Unity的batchmode来实现每天定时打版本。废话不多说,直接上代码。
bat批处理脚本:
@echo off
cd>nul
REM GET THE COMMAND LINE ARGS
SET PLATFORM=%1
REM PLATFORM possible options are: Standalone, Win, Win64, OSXUniversal, Linux64, iOS, Android, WebGL, XboxOne, PS4, WindowsStoreApps, Switch, tvOS.
SET CONFIG=%2
SET OUTPUT=%3
SET PACKAGE=%4
SET BUILDNO=%5
SET UNITY_INSTALL_ROOT_KEY="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Unity"
SET UNITY_ICON_KEY="DisplayIcon"
FOR /F "skip=2 tokens=1,2*" %%A IN ('REG QUERY "%UNITY_INSTALL_ROOT_KEY%" /v "%UNITY_ICON_KEY%" 2^>nul') DO (
SET ValueName=%%A
SET ValueType=%%B
SET ValueValue=%%C
)
if defined ValueValue (
ECHO Unity installation detected!
ECHO %ValueValue%
) else (
ECHO "%KEY_NAME%"\"%VALUE_NAME%" not be found.
EXIT
)
PUSHD %~dp0
SET UNITY=%ValueValue%
SET LOGFILE=%CD%\build_%PLATFORM%_%CONFIG%.log
IF NOT EXIST %OUTPUT% MKDIR %OUTPUT%
ECHO Build Command:
SET BUILDCMD="%UNITY%" -buildTarget "%PLATFORM%" -batchmode -quit -projectPath %CD% -logFile "%LOGFILE%" -executeMethod AutoBuildProcessor.Build
ECHO %BUILDCMD%
%BUILDCMD% -buildArgs:"platform=%PLATFORM%;config=%CONFIG%;output=%OUTPUT%;ispackage=%PACKAGE%;buildno=%BUILDNO%;scenes=MyScreen1&MyScreen2"
SET SHOWLOG=TYPE %LOGFILE%
%SHOWLOG%
POPD
@echo on
exit %ErrorLevel%
上面.bat批处理脚本完成了:
- 读取执行.bat脚本时传入的参数;
- 检查当前环境下是否安装有对应版本的Unity;
- 创建编译时输出的log文件;
- 执行Unity的batchmode下的相关命令;
- 最后执行项目工程里类AutoBuildProcessor的static函数Build完成编译打包。
AutoBuildProcessor.cs代码:
public class AutoBuildProcessor
{
public static void Build()
{
string buildPlatform = CommandLineParser.GetCustomArgument("platform");
string buildConfig = CommandLineParser.GetCustomArgument

本文介绍了一种使用Unity的batchmode功能和批处理脚本来自动完成游戏项目跨平台编译和打包的方法,通过编写AutoBuildProcessor类和CommandLineParser类,实现了从命令行参数读取到Unity编译命令执行的全过程自动化。
最低0.47元/天 解锁文章
1869

被折叠的 条评论
为什么被折叠?



