(02)Unity使用在线AI大模型(调用Python)

目录

一、概要

二、改造Python代码

三、制作Unity场景


一、概要

查看本文需完成(01)Unity使用在线AI大模型(使用百度千帆服务)的阅读和实操,本文档接入指南的基础上使用Unity + C#调用百度千帆大模型,需要阅读者有一定的Unity开发基础。

此功能本质上就是拿Python大模型,大模型问答处理都是在Python中执行,而Unity只是在这个基础上包一层"壳"。那么就涉及到Unity该怎么去和Python进行通信的问题了,本文采用C#内的Process类,需要提前在Python代码内做可传入外部程序调用并传出参数方法,再将Python文件打包成.exe格式的文件。当然在Unity和Python通信的方面也可以用Socket的方式或者其他方式,不一定非要是Process哈~

先看达成效果:

二、改造Python代码

1.在上面提到,想要Python在外部被调用到需要先将Python源码做成可传入传出参数的方法,代码如下:

python 复制代码
import sys
import os
import qianfan
# 这两行必须存在,使传回到Unity的消息不会变成乱码
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

# 
os.environ["QIANFAN_ACCESS_KEY"] = "xx"
os.environ["QIANFAN_SECRET_KEY"] = "xx"

chat_comp = qianfan.ChatCompletion()
def qf(sendmessage):
    resp = chat_comp.do(model="ERNIE-Bot", messages=[{
        "role": "user",
        "content": str(sendmessage)
    }])
    return resp["result"]

s = str(qf(sys.argv[1]))
print(s)

2.接下来需要将Python代码打包成可执行的.exe文件,首先需要在PyCharm终端下载cx_Freeze依赖包,安装命令:pip install cx_Freeze

3.将Python代码打包为.exe文件,继续在终端内输入命令,命令:cxfreeze ++聊天/testtounity.py++ --target-dir dist

4.上述命令中标记下划线的 { ++聊天/testtounity.py++} 是你需要打包Python文件的相对路径

5.打包成功后这里会出现一个名为dist的文件夹

6.在磁盘中找到这个文件夹,找到已经打包为.exe文件的Python脚本,记住这个路径,待会要调用

三、制作Unity场景

1.在界面中创建输入框(InputField,用于发送消息的内容)、按钮(Button,用于点击发送事件)、面板(Panel+Text,用于显示对话记录)

2.新建C#代码页,粘贴以下代码:

python 复制代码
using System.Diagnostics;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
    public InputField _InputField;
    public Button SendBtn;
    public Text ResultTxt;
    private static string resultMessage = string.Empty;
    private void Start()
    {
        SendBtn.onClick.AddListener(SendBtnFunc);
    }
    private void SendBtnFunc()
    {
        ResultTxt.text += "<color=yellow>" + "问题:" + _InputField.text + "</color>" + "\n";
        RunPythonScript(_InputField.text);
        ResultTxt.text += "<color=green>" + "回答:" + resultMessage + "</color>" + "\n";
    }
    private static void RunPythonScript(string argvs)
    {
        Process p = new Process();
        p.StartInfo.FileName = @"C:\Users\JuZ\PycharmProjects\pythonxuexi\dist\testtounity.exe";
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.Arguments = argvs;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.CreateNoWindow = true;
        p.Start();
        p.BeginOutputReadLine();
        p.OutputDataReceived += new DataReceivedEventHandler(Get_data);
        p.WaitForExit();
    }
    private static void Get_data(object sender, DataReceivedEventArgs eventArgs)
    {
        if (!string.IsNullOrEmpty(eventArgs.Data))
        {
            resultMessage = string.Empty;
            resultMessage = eventArgs.Data;
        }
    }
}

3.修改代码页中下述的代码,将路径改为刚刚打包为.exe的Python脚本(本文档2-5)文件的绝对路径:p.StartInfo.FileName = @"++C:\Users\JuZ\PycharmProjects\pythonxuexi\dist\testtounity.exe++";

4.至此,运行Unity!

相关推荐
杨浦老苏16 分钟前
AI驱动的图表生成器Next-AI-Draw.io
人工智能·docker·ai·群晖·draw.io
带刺的坐椅4 小时前
Solon AI 开发学习6 - chat - 两种 http 流式输入输出
java·ai·solon
stormsha7 小时前
裸眼3D原理浅析AI如何生成平面裸眼3D图像以科幻战士破框而出为例
人工智能·计算机视觉·平面·3d·ai
哥不是小萝莉13 小时前
使用 Vibe Coding 构建 AI 自动化评测系统
ai·vibe coding
SEO_juper13 小时前
别再纠结LLMs.txt了!它背后的真相与最佳使用场景,一文讲透。
开发语言·ai·php·数字营销
这儿有一堆花16 小时前
重磅推出!Google Antigravity:一次 “以 Agent 为中心 (agent-first)” 的 IDE 革命
vscode·ai·ai编程·googlecloud
互联网老欣17 小时前
2025年保姆级教程:阿里云服务器部署Dify+Ollama,打造专属AI应用平台
服务器·阿里云·ai·云计算·dify·ollama·deepseek
带刺的坐椅20 小时前
Solon AI 开发学习5 - chat - 支持哪些模型?及方言定制
java·ai·openai·solon
avi911121 小时前
发现一个宝藏Unity开源AVG框架,视觉小说的脚手架
unity·开源·框架·插件·tolua·avg
Learn Beyond Limits1 天前
Data Preprocessing|数据预处理
大数据·人工智能·python·ai·数据挖掘·数据处理