上篇介绍一下基本要用到的命令,要想深入学的,可以去看一下bat基本语法,基本使用batch模式打包就用到的就这一些。
一、启动Unity Batchmode,并执行一个函数
@echo off
pushd %~dp0
echo "---------------update proj.......------------------"
"C:\Program Files\Unity2017.4.24f1\Editor\Unity.exe" -quit -batchmode ^
-projectPath "%~dp0../../../" ^
-executeMethod AbTools.SyncProjFromRemote ^
-lrd %lrd% ^
-rrd %rrd% ^
-logFile build_update_proj.log
if errorlevel 1 goto _err
goto _continue
:_err
echo "unity error"
type build.log
popd
pause
exit
:_continue
popd
直接上源码,在来分析。
给定了一个Unity的安装路径"C:\Program Files\Unity2017.4.24f1\Editor\Unity.exe",执行了-quit退出并以batchmode启动,
-projectPath:
后面放的是需要启动的Unity工程的目录
-executeMethod:
启动后会执行的函数,AbTools.SyncProjFromRemote注意这是写在Unity的里的C#脚本,而且是静态方法
-lrd %lrd% :
这个涉及到进程通讯了,通俗的讲,lrd是在bat设定的一个自定义变量,要把这个变量传到Unity的脚本中使用怎么做?
将lrd加入命令行,在C#中使用c#Environment.GetCommandLineArgs来获取这个参数的值。
这里做的操作是,将lrd和rrd通过bat赋值后,在写入命令行,通过c#Environment.GetCommandLineArgs获取命令行参数列表,在从中读取key,在C#中调用lrd和rrd参数。
-logFile:
输出一个日志文件,名字为build_update_proj.log,在当前路径下
-------------------------------------------------------------------------------------------------------------
二、多函数切换调用
知道了上面这些就能做很多事情了,在bat让用户输出一些自定义信息,然后传入到Unity里进行参数配置,就可以做一下打包相关的操作了
上面只是运行了一个函数,如果我们写了很多个函数,比如有拷贝的、有打AB的,还有删除某些配置的很多函数呢
比如AbTools脚本里有个BuildAB的静态方法,在执行完上面AbTools.SyncProjFromRemote的方法后,如何在单独去调用这个BuildAB呢,(你也可以在C#里面直接调用,但有的时候,在某个步骤出错后,不需要从头开始执行,而直接从出错的步骤继续执行,所以我们会把功能完全独立开来,以便于功能方法能单独调用 )
调用其实还是很上面一样,重复一样的代码只需要替换掉方法名称即可,因为执行了quit后,会退出Unity程序,但再次启动重新执行方法。比如这样
"C:\Program Files\Unity2017.4.24f1\Editor\Unity.exe" -quit -batchmode ^
-projectPath "%~dp0../../../" ^
-executeMethod AbTools.BuildAB^
-lrd %lrd% ^
-rrd %rrd% ^
-logFile BuildAB.log
跟上面一样,改了一个方法名和一个输出的日志名,因为我们把日志分开存储,便于定位问题在哪一步