上篇介绍一下基本要用到的命令,要想深入学的,可以去看一下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

跟上面一样,改了一个方法名和一个输出的日志名,因为我们把日志分开存储,便于定位问题在哪一步