如何在Godot中调用Python解释器

简单地演示一下如何在Godot中调用Python解释器来执行指定的代码字符串和Python文件。

首先,我们创建一个Godot项目,自己指定名称和路径,剩下的配置默认即可。

添加"Node"节点后将其重名为"Main",添加一个Timer作为子节点后并保存当前场景。

这里将Timer的AutoStart和One Shot都勾选,并将Wait Time设置为2s,

该Timer用作自动退出程序的计时器。

 在Main节点上添加脚本并打开,我这里用VS Code作为脚本编辑器。

在你想要创建虚拟环境的Python解释器目录下打开CMD,

使用"python.exe -m venv path/to/your/virtualenv"指令来在指定路径下创建虚拟环境,

我这里的路径是"E:\aardio\Godot\venv"。

 一切顺利的话你的Godot项目的目录结构应该如下图所示。

进入venv文件夹下的Scripts文件夹中,复制python.exe即python解释器的绝对路径,

我这里的路径是"E:\aardio\Godot\venv\Scripts\python.exe",

用变量将其保存并将转义字符"\"替换成"/"。

写一个用来退出程序窗口的信号函数"on_timer_timeout",并在_ready函数中用Timer进行连接。

 在终端中使用"pip install pyautogui"安装PyAutoGUI库,

注意要先用activate.bat或Activate.ps1先激活下环境,

用哪个激活取决于你用的终端是CMD还是PowerShell。

安装成功后在Godot项目的根目录下创建一个名为"main.py"的脚本文件,

写入如下所示的代码,

运行测试一下,如果正常的话鼠标会移动到屏幕左上角原点。

import pyautogui

def main():
    pyautogui.moveTo(0, 0)

if __name__ == '__main__':
    main()

回到Godot脚本文件中,同之前的操作一样,用变量保存"main.py"文件的路径,

重点来了,这里我们先调用Python解释器来执行指定的Python文件。

如果对OS.create_process函数不太了解的话请看官方文档。

在Godot编辑器中选择并运行main场景,正常的话窗口会自动在2秒钟后关闭,

同时在Output一栏会打印pid的信息,即刚才调用Python解释器执行Python文件的进程ID。

 你还可以顺手测试一下该进程是否执行完成后自动退出。

接下来我们看如何用指定的Python解释器执行代码字符串:

首先我们在Main节点下再添加一个Timer Node,重命名为"RunCodeStrTimer"。

将原先的Timer节点的Wait Time设置为4s。

将两个Timer节点都设置为"Access as Unique Name"。

 

如果成功的话节点后面会出现"%"符号。

 

回到脚本文件,在_ready函数中修改并添加成如下代码。

然后我们定义on_run_code_str_time这个信号函数。

为了方便对比这里我写了四段Python代码字符串,

分别用到PyAutoGUI库、time库、DXcam库和pywin32库,如需测试请自行安装。

注意Python代码字符串里面一定要用"\r"来表示换行操作,

单纯的回车在代码作为字符串传递后不会生效,进而导致所有代码失效。

第二段代码也就是time_str执行的话需要把OS.create_process函数的最后一个参数由false改为true,以便显示执行命令的终端窗口。

func on_run_code_str_time():
	var pyautogui_str = "
	\rimport pyautogui
	\rpyautogui.moveTo(0, 0)
	"

	var time_str = "
	\rimport time
	\rdef main():
	\r  print(time.time())
	\r
	\rif __name__ == '__main__':
	\r  main()
	\r  input('')"

	var dxcam_str = "
	\rimport dxcam
	\rdxcam = dxcam.create()
	\rframe = dxcam.grab()
	\rfrom PIL import Image
	\rImage.fromarray(frame).show()
	\rinput('')
	"

	var pywin32_click_str = "
	\rimport win32api
	\rimport win32con
	\rimport time
	\r
	\rwin32api.SetCursorPos((0, 0))
	\r
	\rdef click(x, y):
	\r	# 移动鼠标到指定坐标
	\r	win32api.SetCursorPos((x, y))
	\r
	\r	# 模拟鼠标左键按下和弹起
	\r	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
	\r	time.sleep(0.3)  # 等待一段时间,可以根据需要调整
	\r	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
	\r
	\rclick(30, 50)
	"
	
	# 调用指定路径下的Python解释器执行代码字符串
	var pid2 = OS.create_process(python_interpreter_path, ["-c", pyautogui_str], false)
	if pid2 != -1:
		print("pid2 = ", pid2)

当然你也可以简单地只用我们之前已经安装好的PyAutoGUI库来进行测试。

如果鼠标不能正常移动到屏幕左上角的话可以尝试重启Godot编辑器。

至此,我们已经简单了解了如何在Godot中调用Python解释器来执行指定的文件和代码字符串。 

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值