【Unity 3D学习】Unity 与 Python 互通入门:点击按钮调用 Python(超简单示例)

一、前言

在使用 Unity 做仿真或可视化时,经常希望:

  • Unity 负责界面和交互

  • Python 负责算法或逻辑处理(特别是设计深度学习和图像处理相关的算法)

本文记录一个最基础、最容易理解的 Unity 与 Python 互通示例(因为博主也是刚入门)

👉 在 Unity 中点击按钮,执行 Python 代码,并在 Unity 中看到结果

非常适合刚接触 Unity + Python 的同学。

二、实现效果

实现的功能非常简单:

  1. Unity 场景中设置一个按钮(Button)

  2. 点击按钮后:

Unity 显示 Hello World

Python 代码被执行

Python 在 Unity Console 中输出信息

三、准备工作

1. Unity 环境

  • Unity 已安装

  • 项目中已启用 TextMeshPro

2. Python 环境

  • 本机已安装 Python

  • Unity 中启用了 Python 支持(Unity Editor Python)

四、Unity 脚本代码

1. 新建脚本 Test.cs

cs 复制代码
using UnityEngine;
using TMPro;
using UnityEditor.Scripting.Python;

public class Test : MonoBehaviour
{
    public TextMeshProUGUI text;

    // 按钮点击时调用
    public void OnButtonClick()
    {
        // 在 Unity UI 中显示文字
        if (text != null)
        {
            text.text = "Hello World";
        }

        // 调用 Python 代码
        PythonRunner.RunString(@"
            import UnityEngine
            UnityEngine.Debug.Log('Hello World from Python')
        ");
    }
}

说明:

  • OnButtonClick() 是按钮点击时调用的方法

  • TextMeshProUGUI 用于修改界面文字

  • PythonRunner.RunString() 用于在 Unity 中执行 Python 代码

创建方式如下:

在Assets中右键,创建脚本即可(方法不唯一,只是个人感觉这种方式比较直观)。

五、Unity 场景搭建步骤(重点)

1. 创建 UI

在层级窗口中创建如下结构【右键-UI-画布(Canvas)】,然后在Canvas中【右键-UI-按钮】。

最终实现如下结构的建立。

  • Canvas

  • Button

  • Text (TMP)

2. 管理对象

右键 Canvas → 创建空对象

3. 挂载脚本

  • 将 Test.cs 拖到 UIManager 上

  • 选中 UIManager,在 Inspector 中可以看到 Test (Script)

4. 绑定 Text (TMP)

  • 在 Hierarchy(层级选项) 中找到:Text (TMP)

  • 把 Text (TMP) 拖到 Test 脚本中的 text 槽里

5. 绑定 Button 点击事件(关键)

  • 选中 Button
  • 在 Inspector 中找到 Button (脚本)
  • 找到 On Click () (鼠标单击())
  • 点击 +
  • 将 UIManager 拖到对象槽
  • 选择函数:Test → OnButtonClick() (因为我们在cs脚本中使用了该函数,也可以使用其他凹函数,大体上意思是一样的。)

六、运行测试

  1. 点击 ▶ Play

  2. 点击按钮

可以看到:

  • 按钮文字变为 Hello World

  • Unity Console 输出:Hello World from Python

代码正在运行中:

运行结果如下:

说明实验成功!

结语

作者考虑后续可以在此基础上进一步实现语义通信算法:

  • Unity 与 Python 的网络通信

  • Python 执行复杂算法(如 PyTorch)

  • Unity 显示 Python 返回结果

本文先记录一个最简单、可运行的版本,供初学者参考,欢迎大家交流学习。

相关推荐
liuyicenysabel8 小时前
多服务上线日记三:
运维·服务器·笔记·学习
YM52e8 小时前
鸿蒙ArkTS实战项目 - 门店陈列巡检台:巡检卡片与多列切换实现
学习·华为·harmonyos
一只小小的芙厨10 小时前
基础数论总结
笔记·学习·算法
hsjiasb11 小时前
FreeRTOS学习(三十七)——常见错误与工程规范
学习·学习笔记·freertos
小席是个热心肠11 小时前
Redis的自我学习
数据库·redis·学习
zyf10441612 小时前
暑期实践日志 Day33:完成全部字幕添加,工作基本收尾
学习·计算机网络·剪辑·暑期实践·课题任务
Chris _data13 小时前
WPF 上位机开发学习笔记 - 第四天
笔记·学习·wpf
HY小宝F13 小时前
树莓派 FFmpeg 实战笔记(二):命令行、源码编译与硬件编码的真相
学习·职场和发展·ffmpeg
2601_9672642813 小时前
Jetpack Compose 实践指南:从入门到进阶
java·学习
小雪崩14 小时前
嵌入式学习 day25:哈希表及排序与查找
linux·c语言·数据结构·学习·排序算法