使用命令行运行unity并执行某个静态函数(运用于命令行打包和批量打包)
发布日期:2021-06-30 19:39:17
浏览次数:3
分类:技术文章
本文共 4694 字,大约阅读时间需要 15 分钟。
这个bat批处理首先判断Unity是否运行中,如果运行中,则先杀掉Unity,然后启动Unity并执行某个Editor的静态函数
bat脚本例子:
::判断Unity是否运行中TASKLIST /V /S localhost /U %username%>tmp_process_list.txtTYPE tmp_process_list.txt |FIND "Unity.exe"IF ERRORLEVEL 0 (GOTO UNITY_IS_RUNNING)ELSE (GOTO START_UNITY):UNITY_IS_RUNNING::杀掉UnityTASKKILL /F /IM Unity.exe::停1秒PING 127.0.0.1 -n 1 >NULGOTO START_UNITY:START_UNITYC:CD C:\Program Files\Unity\Editor.\Unity.exe -projectPath E:\my_project\testProject -quit -batchmode -executeMethod BuildTools.BuildAppPAUSE
py脚本例子:
(把下面的python脚本保存为unity_call.py,放在工程目录中,即Assets的外层目录)
import osimport sysimport time # 设置你本地的Unity安装目录unity_exe = 'D:/software/Unity/Editor/Unity.exe'# unity工程目录,当前脚本放在unity工程根目录中project_path = 'E:/UnityProject/test1'# 日志log_file = os.getcwd() + '/unity_log.log'static_func = 'BuildTools.BuildApp'# 杀掉unity进程def kill_unity(): os.system('taskkill /IM Unity.exe /F') def clear_log(): if os.path.exists(log_file): os.remove(log_file)# 调用unity中我们封装的静态函数def call_unity_static_func(func): kill_unity() time.sleep(1) clear_log() time.sleep(1) cmd = 'start %s -projectPath %s -logFile %s -executeMethod %s'%(unity_exe,project_path,log_file,func) print('run cmd: ' + cmd) os.system(cmd) # 实时监测unity的log, 参数target_log是我们要监测的目标log, 如果检测到了, 则跳出while循环 def monitor_unity_log(target_log): pos = 0 while True: if os.path.exists(log_file): break else: time.sleep(0.1) while True: fd = open(log_file, 'r') if 0 != pos: fd.seek(pos, 0) while True: line = fd.readline() pos = pos + len(line) if target_log in line: print(u'监测到unity输出了目标log: ' + target_log) fd.close() return if line.strip(): print(line) else: break fd.close() if __name__ == '__main__': call_unity_static_func(static_func) monitor_unity_log('end build') print('done')
在Unity中的Editor目录中新建一个MyEditorScript.cs脚本,如下
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;public class BuildTools { [MenuItem("Pack/BuildApp")] public static void BuildApp() { var levels = new string[] { "Assets/Scenes/SampleScene.unity" }; BuildPipeline.BuildPlayer(levels, "Build/test.apk" + appName, BuildTarget.Android, BuildOptions.None); Debug.Log("end build"); }}
MAC
mac的话,杀掉Unity进程的命令
ps -ef|grep Unity|grep -v grep|cut -c 9-15|xargs kill -9也可能是ps -ef|grep Unity|grep -v grep|cut -c 8-12|xargs kill -9
说明:
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -15”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -15”命令的参数,并执行该令。
启动Unity的命令(具体路径根据你的安装目录)
/Applications/Unity/Unity.app/Contents/MacOS/Unity
Unity命令行参数解释:
-batchmode
在 批处理模式下运行Unity。应始终与其他命令行参数一起使用,因为它确保不会弹出窗口,无需任何人为的干预。当脚本代码在执行过程中发生异常,资源服务 器更新失败或其他操作失败时Unity将立即退出,并返回代码为1。请注意,在批处理模式下, Unity将向控制台发送输出版本最小的日志。当然,日志文件将包含完整的日志信息。-quit 其他命令执行完毕后将退出Unity编辑器。请注意,这可能会导致错误消息被隐藏(但他们将显示在Editor.log文件)-buildWindowsPlayer <pathname> 建立一个单独的Windows游戏(例如:-buildWindowsPlayer path/to/your/build.exe)-buildOSXPlayer <pathname> 建立Mac游戏(例如:-buildOSXPlayer path/to/your/build.app)-importPackage <pathname> 导入提供的package,不会显示导入对话框-createProject <pathname> 根据提供的路径建立一个空项目-projectPath <pathname> 打开指定路径的项目-logFile <pathname> 指定将要被写入编辑的log文件-assetServerUpdate <IP[:port] projectName username password [r <revision>]> 可 通过ip端口强制更新资源服务器的项目。端口是可选的,如果不是的话可以假定一个标准端口(10733)。最好使用此命令配合- projectpath参数确保你在正确的项目里工作。如果没有提供项目名字是那么就是最后一个Unity打开的项目。如果没有选择项目的路径则由- projectpath自动创建。-exportPackage <exportAssetPath exportFileName> 根 据路径导出package。exportAssetPath是一个文件夹(相对Unity项目的根目录)为了导出Unity项目并且 exportFileName是package的名称。目前,此选项只能在同一个时间导出整个文件夹。这个命令通常需要使用- projectpath参数-nographics (Windows only) 当运行在批处理模式,不会初始化显卡设备。这使得它可以在你的机器上自动按工作流程运行,甚至它没有GPU。-executeMethod <ClassName.MethodName> 在 Unity启动的同时会执行静态方法,该项目是开放的并且是在可选资源服务器更新完成之后。这可以用来不断的整合,进行单元测试,制作模型,准备一些数据 等。如果你想通过命令行返回一个错误,你可以抛出一个异常,会引发代码为1的Unity关闭或其他引发EditorApplication.Exit非零 代码。使用executeMethod,你需要在编辑文件夹有一个脚本并且类里有一个静态函数。-batchmode 在"headless"模式下运行游戏。游戏将不显示任何内容,或接受用户输入。这对运行网络游戏的服务器有很大的作用的。-force-opengl (Windows only) 让游戏使用OpenGL进行渲染,即使有可用的Direct3D。通常情况是使用Direct3D,但如果是Direct3D 9.0c的不可用的话则会选用OpenGL。-single-instance (Windows only) 在同一时候只允许一个游戏实例运行。如果另一个实例已在运行,然后再次通过 -single-instance启动它的话会调节到现有的这个实例。-nolog (Windows only) 不产生输出日志。 通常output_log.txt被写在游戏输出目录下的*_Data文件夹中 ,在debug.log中打印输出的地方。-force-d3d9-ref (Windows only) 使游戏运行在Direct3D的"Reference"软件渲染模式,必须要安装DirectX SDK才能使其工作。这主要是用于建立自动化测试对象,这样您可以确保不管是使用什么显卡,其渲染效果是完全一样的。-adapter N (Windows only) 允许游戏全屏运行在另一台显示器上,其中N表示显示的号码。-popupwindow (Windows only) 这个窗口将以弹出的方式创建(没有框架)
转载地址:https://linxinfa.blog.csdn.net/article/details/70914939 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月09日 10时29分11秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
行阶梯型矩阵
2019-04-30
信号量机制
2019-04-30
临界资源与临界区
2019-04-30
matlab中uint8,double,im2double和im2uint8的区别
2019-04-30
数字图像处理总复习
2019-04-30
图像去噪(包含修正的阿尔法均值滤波及通用滤波方法代码)
2019-04-30
SVM进行人脸检测
2019-04-30
C++学习笔记
2019-04-30
图像处理学习笔记
2019-04-30
Machine Learning Onramp on MATLAB 学习笔记
2019-04-30
Machine Learning with MATLAB 1.1 to 2.2
2019-04-30
Learning DSP with MATLAB
2019-04-30
用MATLAB实现m序列的生成(MATLAB 2021a适用)
2019-04-30
MATLAB函数备忘(定期更新)
2019-04-30
13行MATLAB代码实现网络爬虫 爬取NASA画廊星图
2019-04-30
MATLAB指定路径保存图片方法
2019-04-30
Python一键获取微信推送封面图
2019-04-30
油猴脚本:微信推送浏览功能拓展
2019-04-30
JavaScript DOM对象操作详解
2019-04-30
JavaScript 表单操作与MD5加密
2019-04-30