在 Unity 中调用腾讯云机器翻译

在游戏开发中,常常需要对文本进行翻译。在游戏开发的前期,通常就是对配置表进行机翻,调用各种大模型机器翻译进行操作。

本文主要介绍如何通过 C# 代码来调用腾讯云的文本翻译功能,并介绍一个在 Unity 中实现的示例。这样能方便地让我们以后能通过代码批量调用,提高工作效率。

注意:整个解决方案我只测试了编辑器,没有测试运行时。运行时是否可用暂不清楚。

1、SDK 接入

首先去腾讯云服务的官网下载SDK:https://cloud.tencent.com/document/sdk

因为我们这里是接入 Unity ,所以下载 .Net 版本。下面两个一个是 GitHub 仓库,一个是 Gitee 仓库,东西都是一样的,按照各位的喜好下载即可。

之后我们准备将其接入 Unity。在接入腾讯云的 SDK 之前,我们需要先下载一个newtonsoft.json.dll包,这个应该是 .Net 框架自带的,但是 Unity 没有内置,所以需要我们自己加进来。这里大家自己去网上找资源就行,我用的是这个:https://cn.dll-files.com/newtonsoft.json.dll.html

然后我们导入腾讯云的文本翻译部分,首先我们之前下载下来的仓库,里面是C#源代码,我们不是所有的都用,只需要载入部分即可,只需要如下两个文件夹的东西:

  • ...\tencentcloud-sdk-dotnet\TencentCloud\Common

  • ...\tencentcloud-sdk-dotnet\TencentCloud\Tmt

把这两个文件夹直接拷贝到我们的 Unity 工程,即完成了 SDK 的接入。

如上图所示,确保引入了上面三个东西。

2、参数获取

这里需要获取腾讯云的一些参数,主要是 SecretId、SecretKey 以及 ProjectID 这三个东西,这些都可以在控制台申请到。

注意,SecretId、SecretKey 只在创建用户时候能看到一次,一定要注意保存。

3、API 调用

直接上代码:

cs 复制代码
/// <summary>
/// 腾讯云翻译器
/// https://cloud.tencent.com/document/product/551/15612
/// </summary>
public class TencentTranslator : ScriptableObject
{
    [Title("参数配置")]
    public string secretId = "";
    public string secretKey = "";
    public string Region = "ap-chengdu"; // 根据实际选择地域

    private TmtClient m_Client;
    public TextTranslateRequest m_Req = new TextTranslateRequest();

    [LabelText("源语言")]
    public string Source = "zh";
    [LabelText("目标语言")]
    public string Target = "en";
    [LabelText("项目ID")]
    public int ProjectId;

    public void Init()
    {
        var credential = new Credential();
        credential.SecretId = secretId;
        credential.SecretKey = secretKey;
        m_Client = new TmtClient(credential, Region);
        m_Req.Target = Target;
        m_Req.Source = Source;
        m_Req.ProjectId = ProjectId;
        Debug.Log($"TencentTranslator 初始化完成:{ProjectId}");
    }

    /// <summary>
    /// 翻译的频率,这个需要查看官方文档;
    /// 目前我看到的限制是每秒5次;
    /// </summary>
    [LabelText("每秒翻译数量")]
    public int TranslateRate = 5;

    public async Task<string> Translate(string context)
    {
        if (m_Client == null)
            Init();

        try
        {
            m_Req.SourceText = context;
            long scecond = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            var rsp = await m_Client.TextTranslate(m_Req);
            long offset = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - scecond;

            Debug.Log($"【腾讯云翻译】{context}\n翻译结果:{rsp.TargetText}\nAPI 调用耗时:{offset} ms");

            var delayTime = (int)math.max(0, (long)((1.0f / TranslateRate) * 1000) - offset);
            if (delayTime > 0)
                await System.Threading.Tasks.Task.Delay(delayTime);
            return rsp.TargetText;
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
            return string.Empty;
        }
    }

    [Title("测试")]
    [Space]
    [ShowInInspector, LabelText("测试翻译")]
    private string TextContext = "你需要我翻译什么?";

    [Button("翻译测试")]
    public void TestTranslate()
    {
        if (ProjectId == 0)
        {
            Debug.LogError("项目ID必填!");
            return;
        }

        if (m_Client == null)
            Init();

        Translate(TextContext);
    }


}

非常简单,之后我们直接在 Unity 里就能用了:

相关推荐
szephyr10 小时前
腾讯云 ADP 智能体的 Skills 版本回滚总是回到旧配置,是缓存没清还是版本管理没开?
java·缓存·腾讯云
sbjdhjd11 小时前
大三网安秋招核心学习前言(AI 安全 + Web 漏洞 + 内网渗透全考点)
人工智能·网络协议·学习·安全·网络安全·开源·php
唐青枫11 小时前
别再手写 args[0]:C#.NET CommandLineParser 命令行工具实战详解
c#·.net
LccKyI11 小时前
C#学习day06(方法/函数及其关键字,附思维导图)
经验分享·学习·c#
.Peter12 小时前
.NET/WPF 程序在部分 Windows 电脑无法保存用户环境变量:使用 DPAPI 实现安全兼容
windows·信息安全·c#·.net·wpf·环境变量·dpapi
xian_wwq12 小时前
【学习笔记】Loop Engineering,从手动提示到目标驱动自动化-13/16
笔记·学习·自动化
殷忆枫12 小时前
K210 BOX学习笔记:环境搭建及模型训练部署
学习
LONGZETECH12 小时前
无人机实训高成本痛点解法:虚拟仿真实现 70% 耗材损耗下降
大数据·算法·unity·架构·无人机
qq_1851986913 小时前
SpingBoot3入门学习-Web开发-三
java·数据库·学习
lifallen13 小时前
Avernet:Agent 的组织网络
人工智能·学习·ai·开源软件·ai编程