游戏机器学习课程文档

让我们构建智能机器人NPC演示🤖

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

让我们构建智能机器人NPC演示🤖

第0步:获取项目文件

你可以在这里找到 👉 完整的Unity项目

第1步:安装Unity Sentis

Sentis 文档 👉 https://docs.unity3d.org.cn/Packages/com.unity.sentis@latest

  1. 打开 Jammo 项目

  2. 点击 Sentis 预发布包 或前往 Window > Package Manager,点击 + 图标,选择“Add package by name…”并输入“com.unity.sentis”

Sentis

将版本设置为 1.3.0

  1. 按下“添加”按钮安装包。
Sentis

第2步:安装Sharp Transformers 💪

Sharp Transformers是一个Unity插件,提供用于在Unity游戏中运行Transformer 🤗模型的实用工具。

我们需要它来完成分词步骤。

前往“Window”>“Package Manager”打开包管理器。

点击左上角的“+”并选择“Add package from git URL”。

输入此仓库的URL并点击“Add”:https://github.com/huggingface/sharp-transformers.git

第3步:构建推理过程🧠

Sentis文档所述,要在Unity中使用Sentis运行神经网络,我们需要遵循以下步骤。

  1. 使用Unity.Sentis命名空间。

  2. 加载神经网络模型文件。

  3. 为模型创建输入

  4. 创建推理引擎(一个worker)。

  5. 使用输入运行模型以推断结果。

  6. 获取结果.

在我们的例子中,所有这些都将在SentenceSimilarity.cs文件中完成,该文件将附加到我们的机器人上。

在awake中,我们

  1. 加载我们的神经网络。

  2. 创建一个推理引擎(一个worker)。

  3. 创建一个操作符,它将允许我们对张量执行操作。

Sentis Similarity

我们有三个函数

  1. Encode:接收玩家输入(文本),进行分词和嵌入
Sentis Similarity
  1. SentenceSimilarityScores计算输入嵌入(用户输入的内容)和比较嵌入(机器人动作列表)之间的相似度得分
Sentis Similarity
  1. RankSimilarityScores:根据玩家输入获取最相似的动作及其索引
Sentis Similarity

第4步:构建机器人行为🤖

我们需要定义机器人的行为

我们的想法是,机器人有不同的可能动作,动作的选择将取决于最相似的动作

我们首先需要定义有限状态机,这是一种简单的经典AI技术,其中每个状态定义一种特定的行为

然后,我们将制作实用函数,用于选择状态以及要执行的一系列动作

状态机🧠🤖

在状态机中,每个状态代表一种行为,例如,移动到某一列,打招呼等。根据代理所处的状态,它将执行一系列动作

在我们的例子中,我们有7个状态

Jammo State Machine

我们首先需要创建一个名为 State 的枚举,其中包含所有可能的 State

Jammo State Machine

因为我们需要不断检查状态,我们使用 switch 系统在 Update() 方法中定义状态机,每个 case 都是一个状态

Jammo State Machine

对于每个状态,我们定义了代理的行为,例如在我们的 Hello 状态中,机器人必须朝玩家移动,正确面对他,然后启动其 Hello 动画,然后返回 Idle 状态

Jammo State Machine

我们现在已经为每个不同的状态定义了行为。这里的魔力在于,语言模型将定义哪个状态与玩家输入最接近。然后在实用函数中,我们调用此状态。

让我们定义实用函数📈

我们的行动列表如下所示

Utility
  • 该句子将被嵌入到AI模型中。

  • 动词是状态

  • 名词(如果有)是互动对象(柱子、方块等)

此实用函数将选择与玩家输入文本相似度得分最高的句子相关的动词和名词。

但首先,为了摆脱许多奇怪的输入文本,我们需要设置一个相似度得分阈值

例如,如果我说“看看那些兔子”,我们的任何可能行动都不相关。因此,我们不会选择得分最高的行动,而是调用Puzzled状态,该状态将以困惑的动画来动画机器人。

Jammo rabbits

如果分数较高,那么我们将获得与状态对应的动词和名词(目标对象,如果有的话)

我们将状态设置为与动词对应。这将激活与该状态对应的行为。

Utility

就这样,现在我们准备好与我们的机器人互动了!

第5步:与机器人互动🤖

在这一步,你只需要点击编辑器中的播放按钮。然后你就可以输入一些指令并查看结果

这很棒!但最好的学习方式是尝试、破坏和修改演示。

(可选)改进游戏:添加新动作

添加新动作非常简单。我们举个例子

  • 复制 YellowPillar 游戏对象并移动它

  • 将名称更改为 GreenPillar

  • 创建新材质并将其设置为绿色

  • 将材质放置在 GreenPillar 上

现在我们已经放置了新的游戏对象,我们需要将这种可能性添加到句子中并点击 Jammo_Player。

在动作列表中点击加号按钮并填写这个新的动作项

Utility
  • 添加“前往绿色柱子”
  • 前往
  • 绿色柱子

就是这样!你可以轻松迭代并为你的游戏添加更多动作

再次强调,别忘了测试相似度阈值,看看是否需要增加或减小它

< > 在 GitHub 上更新