(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!

相关推荐
超龄魔法少女10 小时前
[Unity] ShaderGraph动态修改Keyword Enum,实现不同效果一键切换
unity·技术美术·shadergraph
WebCandy10 小时前
EsChatPro 接入国内 DeepSeek 大模型
ai·aigc
蔗理苦11 小时前
2024-12-24 NO1. XR Interaction ToolKit 环境配置
unity·quest3·xr toolkit
花生糖@12 小时前
Android XR 应用程序开发 | 从 Unity 6 开发准备到应用程序构建的步骤
android·unity·xr·android xr
向宇it12 小时前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
向宇it16 小时前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
南七澄江18 小时前
各种网站(学习资源及其他)
开发语言·网络·python·深度学习·学习·机器学习·ai
ai_lian_shuo20 小时前
四、使用langchain搭建RAG:金融问答机器人--构建web应用,问答链,带记忆功能
python·ai·金融·langchain·机器人
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇26】C#面向对象动态多态——接口(Interface)、接口里氏替换原则、密封方法(`sealed` )
java·开发语言·unity·c#·游戏引擎·里氏替换原则
凳子花❀1 天前
强化学习与深度学习以及相关芯片之间的区别
人工智能·深度学习·神经网络·ai·强化学习