C# 如何在unity中模拟键盘键?

C# 如何在unity中模拟键盘键?,c#,unity3d,C#,Unity3d,我目前正在做我的研究生项目,它是一个自动驾驶仪,我正在用unity制作飞机以及python中的所有机器学习内容,python代码将只返回飞机将执行的操作“上、下、左、右、引擎通电…),c代码将处理所有物理等,所以我想模拟一下如果(左)然后计算机将按(A) 我试过输入模拟器,但仅此而已 string t = GUIUtility.systemCopyBuffer; // this will get the input from python if (t=="left") // if what t

我目前正在做我的研究生项目,它是一个自动驾驶仪,我正在用unity制作飞机以及python中的所有机器学习内容,python代码将只返回飞机将执行的操作“上、下、左、右、引擎通电…),c代码将处理所有物理等,所以我想模拟一下如果(左)然后计算机将按(A)

我试过输入模拟器,但仅此而已

string t = GUIUtility.systemCopyBuffer; // this will get the input from python

if (t=="left") // if what the neural network choose is left do this
{
    //what I need to convert the "left" to an actual keyboard press to
    //be used by the crossplatformmanager
}
float roll = CrossPlatformInputManager.GetAxis("Horizontal");
我期望:

if (t=="left")
{ 
    keyboardbutton="A" 
}

而且,
CrossPlatformInputManager.GetAxis
会将其视为我实际按下了键。

我认为这是一个XY问题,通常情况下,对于您无法控制的程序,需要输入模拟,因为您无法直接访问代码。但是对于您的问题,python和unity project都是您自己编写的,所以您可以这样做不需要模拟输入,只需调用方法即可

例如,如果要通过水平轴输入滚动某个对象,可以执行以下操作:

var h = Input.GetAxis("Horizontal");
Roll(h);
然后,如果该值来自剪贴板:

float h;
string t = GUIUtility.systemCopyBuffer;
switch(t) {
   case "left": h = -1f; break;
   case "right": h = 1f; break;
   ....
}
Roll(h);

我认为这是一个XY问题,通常情况下,输入模拟是不受您控制的程序所需要的,因为您无法直接访问代码。但是对于您的问题,python和unity project都是您自己编写的,所以您不需要模拟输入,只需调用该方法即可

例如,如果要通过水平轴输入滚动某个对象,可以执行以下操作:

var h = Input.GetAxis("Horizontal");
Roll(h);
然后,如果该值来自剪贴板:

float h;
string t = GUIUtility.systemCopyBuffer;
switch(t) {
   case "left": h = -1f; break;
   case "right": h = 1f; break;
   ....
}
Roll(h);

有趣的项目!但我并不完全清楚:您正在试图让python控制平面(使其上升或下降,等等…),然后在unity 3D引擎中使用它来可视化它,对吗?那么为什么需要将C#中的输入导出到python?不是这样吗?当然,您不能从unity内部引发系统范围的键盘事件,但您可以使用本地套接字连接将命令传递到python脚本(如果该脚本侦听套接字的话).如果Unity本身发生了什么事情,为什么不简单地将它添加到
中呢?换句话说:你到底想实现什么?或者(仅在windows上)你可以试试你是否偶然发现了?在这件事上你也有话要说。特别是你可能会发现这个有趣的项目!但我并不完全清楚:你试图让巨蟒控制这个平面(让它向上或向下,等等),然后在unity 3D引擎中使用它来可视化它,对吗?那么为什么需要将C#中的输入导出到python?不是这样吗?当然,您不能从unity内部引发系统范围的键盘事件,但您可以使用本地套接字连接将命令传递到python脚本(如果该脚本侦听套接字的话).如果Unity本身发生了什么事情,为什么不简单地将它添加到
中呢?换句话说:你到底想实现什么?或者(仅在windows上)你可以试试你是否偶然发现了?也有一些关于这个问题的话要说。特别是你可能会觉得这很有趣。这是一个比我确定的要进步的过程,但这将意味着旋转将是硬左或硬右,这对驾驶飞机来说并不理想,所以我将采用这个,并尝试将其作为增量h+=0。01对于计算机按下按钮的每一个时间步,但非常感谢您的帮助这肯定比我所做的要进步,但这意味着旋转将是硬左或硬右,这不适合飞行飞机,因此我将取此值,并尝试将其作为计算机按下的每一个时间步的增量h+=0.01按下按钮,但非常感谢你的帮助