[unity]C#脚本调用外部exe
2021/7/26 20:37:34
本文主要是介绍[unity]C#脚本调用外部exe,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在unity下对照背景图片调整物体的位姿,想要调整好之后把位姿用opencv处理一下。opencv这部分已经有现成的C++代码,每次都要把位移旋转6个参数复制到VS里面去再编译运行,效率太低。又不想再去C#下重写了,打算VS直接生成exe让unity调用。
脚本在编辑模式下执行
首先在C#脚本添加
[ExecuteInEditMode]
让该脚本在编辑模式下也可以被调用,不用每次都启动才运行脚本。
创建一个“Button”
设置一个public的布尔变量,初始化为false,在Update()中写一个if语句,为true就执行exe,执行后将布尔变量重设为false。这样就相当于一个button,点击一次就启动一次exe。
public bool run_exe = false; ... void Update() { if (run_exe) { //运行函数 run_exe = false; //调用exe //... }
Process类调用exe(不止exe)
using System.Diagnostics; ... Process foo = new Process(); foo.StartInfo.FileName = "D://UnityPoseTransform.exe"; foo.StartInfo.Arguments = "TEST"; foo.Start();
关于StartInfo,可以看到通过改变StartInfo.Filename的值,可以调用任何类型的文件,并不只局限于exe,py,doc,txt等等都行。这个后面会说。
Arguments是字符串类型。
在被调用的exe中可以打印看一下
cout << "argc = " << argc << endl; for (int i = 0; i < argc; i++) cout << argv[i] << endl; cout << "argv end" << endl;
第一个参数是Filename,第二个是Arguments,然后就可以通过分割字符串进一步处理。
问题:StartInfo中包含空格
如果StartInfo中包含空格,比如“3_Vampire queen”,就会以空格为分界变成两个参数。
为什么会出现这种情况?
参考:Spaces in file path passed as command line argument c#
p1是一个Process类示例
Process p1 = new Process();
下面的代码
p1.StartInfo.Filename = "test.exe"; p1.StartInfo.Arguments = "arg"; p1.Start()
等同于
p1.Start("test.exe","arg");
等同于在cmd中敲
test.exe arg
因此,当参数中有空格时,例如“arg1 arg2”
test.exe arg1 arg2
在cmd中执行时,空格会被视为分隔符
参数中包含 ' * '等符号也是同理
解决办法
1.对空格使用转义\
但这样并不友好,需要检查参数中是否有空格
2.使用单引号(没测试)
3.开头添加@,让转义字符表示原意,不要进行转义。
4.给参数加双引号
简单粗暴
p1.StartInfo.Arguments = "\""+arg+"\"";
相当于test.exe "arg1 arg2"
测试一下
int main(int argc, char* argv[]) { cout << "argc = " << argc << endl; for (int i = 0; i < argc; i++) cout << argv[i] << endl; cout << "argv end" << endl; return 0; }
这篇关于[unity]C#脚本调用外部exe的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID