工作中有一个需求,就是将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实例和执行其中的脚本方法的使用和注意相关推荐

  1. PnPUtil (PnPUtil.exe) 是一个命令行工具,使管理员可以执行以下操作驱动程序包

    C:\Users\Administrator>pnputil Microsoft PnP 工具 PNPUTIL [/add-driver <...> | /delete-driver ...

  2. cmd.exe 的命令行启动参数(可用于执行命令、传参或进行环境配置)

    有一些程序不支持被直接启动,而要求通过命令行启动.这个时候,你就需要使用 cmd.exe 来启动这样的程序.我们都知道如何在 cmd.exe 中启动一个程序,但是当你需要自动启动这个程序的时候,你就需 ...

  3. Java黑皮书课后题第7章:*7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目

    7.22(计算一个字符串中大写字母的数目)编写程序,从命令行输入一个字符串,然后显示字符串中大写字母的数目 题目 题目描述 破题 代码 运行实例 题目 题目描述 7.22(计算一个字符串中大写字母的数 ...

  4. npm -- 如何在本地安装npm npm 相关命令 本地使用命令行搭建一个 vue 工程

    npm 安装 1.下载 nodejs 在安装完 nodejs 之后,执行 npm -v ,就已经可以执行出结果了 注1:npm 和 cnpm 的区别 npm 是 nodejs 的包管理器,用于 nod ...

  5. 12.15有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数

    有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.编写一个程序,从命令行得到一个整数,判断该数是不是回文数 package Text6;import java.util.Scanner; ...

  6. 有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数。

    package task08;import java.util.Scanner;/** 8.有一种数叫回文数,正读和反读都一样,如12321便是一个回文数.* 编写一个程序,从命令行得到一个整数,判断 ...

  7. 从命令行输入一个字符串!要求从中随机选择6个字符组成验证码!

    从命令行输入一个字符串!要求从中随机选择6个字符组成验证码! import java.util.Random; import java.util.Scanner; public class Rando ...

  8. 每天一个JavaScript实例-apply和call的使用方法

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

最新文章

  1. SAP MM ME21N 创建PO时报错 - Net price in CNY becomes too large – 之原因分析
  2. python的工作方向-python职业发展方向有哪些,各有什么优劣?
  3. PKI/CA (4)根CA信任模型“概述”
  4. [mybatis]Getting Started
  5. [react] 在react中页面重新加载时怎样保留数据?
  6. iPhone 12系列起售价又要涨了?128GB起步...
  7. 浅析GestureDetector
  8. tcpdump抓SQL[转]
  9. 考虑一个包含n个元素的普通二叉最小堆数据结构,它支持最坏情况时间代价为O(lgn)的操作INSERT和EXTRACT-MIN。请给出一个势函数Φ,使得INSERT的平摊代价为O(lgn),EXTRAC
  10. CCF计算机职业资格认证考试资料 部分题目答案 题库
  11. linux服务器console口,Linux重定向console口控制台
  12. java中级程序员面试
  13. 第八章:Junit——selenium IED 的版本和 火狐浏览器的版本 相对应
  14. PEEKABOO——alpha冲刺置顶集合随笔
  15. Codeforces 513G1 or 513G2 Inversions problem DP
  16. 泰山OFFICE技术讲座:由中英文混排,谈间距kerning
  17. 保守形态抗锯齿 (CMAA) - 2014 年 3 月更新
  18. NUC970设备驱动
  19. WIN7 64位操作系统下成功安装Oracle10g(32位)
  20. 使用Crowd集成Confluence与JIRA

热门文章

  1. 花滑三周连跳_花滑女单短节目惊现三周半跳 称就像做梦一样
  2. redis查看某一个key的大小_Redis笔记
  3. Android之本地摄像头,Android之调用本地摄像头
  4. oracle+greatest+max,ORACLE 内置函数之 GREATEST 和 LEAST(求多列的最大值,最小值)
  5. 如果你需要品质背景素材,看过来
  6. 成毅高清电脑桌面壁纸
  7. python主讲移动端自动化测试框架appium_Appium-移动端自动测试框架,如何入门?...
  8. QJsonObject与QString的相互转换(处理了中文乱码)
  9. Spring 框架 AOP 的总结
  10. 在Linux下写一个简单的驱动程序