命令行开启一个unity实例和执行其中的脚本方法的使用和注意
工作中有一个需求,就是将unity工程放在服务器上,自动执行一些打包任务。这时候就需要启动一个没有GUI的unity,并自动执行其中的打包脚本。
1.官网的说明:
官网API
2.一般的调用方法:
2.1创建入口方法
首先在工程力写一个非mono的C#脚本。在里面创建一个类和一个静态方法。这个静态方法不能有参数。
2.2启动unity调用方法。
之后在批处理脚本里调用如下命令
"C:\Program Files\Unity\Hub\Editor\2020.3.9f1c1\Editor\Unity.exe" -quit -batchmode -projectPath "You Project Path" -logFile "D:\UnityFile\NewRemoteProject\__kellylog.txt" -executeMethod TestCmd.Func1
第一段路径是所需要启动的unity版本的unity.exe。可以通过unityhub来查找路径。
//插入图片
“-quit” :代表运行完毕后关闭unity。
“-batchmode” :以批处理模式运行 Unity。
“-projectPath ” : 之后跟着你要打开的工程的路径
“-logFile” : 可选项,如果需要打出unitylog的话,之后跟着你要保存的log文件路径
“-executeMethod ” :之后跟着你要调用的入口方法。如果在自定义的命名空间的话,要从命名空间开始写。
如何向入口方法里传参数
由于只能调用无参的静态方法,但通过传参控制程序又是很常见的需求,例如登录账号。所以要另辟蹊径处理。
一种方法是写个配置文件,在程序运行时去读即可,还有一种方法是通过环境变量来设置。
通过环境变量设置程序参数
首先在C#脚本里读取环境变量
var EnvVal = System.Environment.GetEnvironmentVariable("Env1");
这个方法有重载。默认是读取该进程的环境变量。也可以通过重载读取用户和系统的环境变量。
之后只要在批处理脚本里设置环境变量就行了。
set Env1=1234
注意空格也会被算在批处理的变量和值里,所以等号两边不能有空格。
3.使用中遇到的坑
1.如果用了EditorCoroutine插件里的开启协程方法
项目中原来都用了EditorCoroutine插件来在Editor下用协程方法,用来做异步。但到了批处理模式下,由于没有了GUI,在开启协程后需要手动刷新Editor下的update方法。如下,传入一个bool值来控制是否继续刷新等待。
//主方法里
bool isComplete = false;
EditorCoroutineUtility.StartCoroutineOwnerless(CorFun(()=> { isComplete = true; }));
StartUpdate(ref isComplete);
private static void StartUpdate(ref bool isCompleted)
{
while (!isCompleted)
{
EditorApplication.update?.Invoke();
}
}
注意这时Editor的Update里的方法在主线程里执行,异步变为同步。
当然也可以保持异步形式,就是主线程持续刷新Editor的Update,把业务代码放在子线程里,例如用BeginInvoke等。但反过来不行,因为Editor的Update只能在主线程里调。
实际上在批处理模式下,editorApplicants.update 还是会被隔一段时间调用。并不用直接调代码去刷。之前之所以一调协程方法就直接退出了,是因为在批处理里加了-quit,导致协程方法一调用,就开始继续执行原方法的下一行,如果原方法完成,Unity就自动关闭,不管协程是否还在工作。解决方法是不能在批处理时加-quit,因此要在工程完成时手动调用一下EditorApplication.Exit(errorCode);
同时不建议在主线程做这种阻塞的等待,可能会导致一些回调无法执行而卡死。
命令行开启一个unity实例和执行其中的脚本方法的使用和注意相关推荐
- PnPUtil (PnPUtil.exe) 是一个命令行工具,使管理员可以执行以下操作驱动程序包
C:\Users\Administrator>pnputil Microsoft PnP 工具 PNPUTIL [/add-driver <...> | /delete-driver ...
- cmd.exe 的命令行启动参数(可用于执行命令、传参或进行环境配置)
有一些程序不支持被直接启动,而要求通过命令行启动.这个时候,你就需要使用 cmd.exe 来启动这样的程序.我们都知道如何在 cmd.exe 中启动一个程序,但是当你需要自动启动这个程序的时候,你就需 ...
- Java黑皮书课后题第7章:*7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目
7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目 题目 题目描述 破题 代码 运行实例 题目 题目描述 7.22(计算一个字符串中大写字母的数 ...
- npm -- 如何在本地安装npm npm 相关命令 本地使用命令行搭建一个 vue 工程
npm 安装 1.下载 nodejs 在安装完 nodejs 之后,执行 npm -v ,就已经可以执行出结果了 注1:npm 和 cnpm 的区别 npm 是 nodejs 的包管理器,用于 nod ...
- 12.15有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数
有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.编写一个程序,从命令行得到一个整数,判断该数是不是回文数 package Text6;import java.util.Scanner; ...
- 有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数。
package task08;import java.util.Scanner;/** 8.有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.* 编写一个程序,从命令行得到一个整数,判断 ...
- 从命令行输入一个字符串!要求从中随机选择6个字符组成验证码!
从命令行输入一个字符串!要求从中随机选择6个字符组成验证码! import java.util.Random; import java.util.Scanner; public class Rando ...
- 每天一个JavaScript实例-apply和call的使用方法
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写
测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...
最新文章
- SAP MM ME21N 创建PO时报错 - Net price in CNY becomes too large – 之原因分析
- python的工作方向-python职业发展方向有哪些,各有什么优劣?
- PKI/CA (4)根CA信任模型“概述”
- [mybatis]Getting Started
- [react] 在react中页面重新加载时怎样保留数据?
- iPhone 12系列起售价又要涨了?128GB起步...
- 浅析GestureDetector
- tcpdump抓SQL[转]
- 考虑一个包含n个元素的普通二叉最小堆数据结构,它支持最坏情况时间代价为O(lgn)的操作INSERT和EXTRACT-MIN。请给出一个势函数Φ,使得INSERT的平摊代价为O(lgn),EXTRAC
- CCF计算机职业资格认证考试资料 部分题目答案 题库
- linux服务器console口,Linux重定向console口控制台
- java中级程序员面试
- 第八章:Junit——selenium IED 的版本和 火狐浏览器的版本 相对应
- PEEKABOO——alpha冲刺置顶集合随笔
- Codeforces 513G1 or 513G2 Inversions problem DP
- 泰山OFFICE技术讲座:由中英文混排,谈间距kerning
- 保守形态抗锯齿 (CMAA) - 2014 年 3 月更新
- NUC970设备驱动
- WIN7 64位操作系统下成功安装Oracle10g(32位)
- 使用Crowd集成Confluence与JIRA
热门文章
- 花滑三周连跳_花滑女单短节目惊现三周半跳 称就像做梦一样
- redis查看某一个key的大小_Redis笔记
- Android之本地摄像头,Android之调用本地摄像头
- oracle+greatest+max,ORACLE 内置函数之 GREATEST 和 LEAST(求多列的最大值,最小值)
- 如果你需要品质背景素材,看过来
- 成毅高清电脑桌面壁纸
- python主讲移动端自动化测试框架appium_Appium-移动端自动测试框架,如何入门?...
- QJsonObject与QString的相互转换(处理了中文乱码)
- Spring 框架 AOP 的总结
- 在Linux下写一个简单的驱动程序