遊戲機器學習課程文件
讓我們構建智慧機器人NPC演示🤖
並獲得增強的文件體驗
開始使用
讓我們構建智慧機器人NPC演示🤖
第0步:獲取專案檔案
你可以在這裡找到 👉 完整的Unity專案
第1步:安裝Unity Sentis
Sentis 文件 👉 https://docs.unity3d.com/Packages/com.unity.sentis@latest
開啟 Jammo 專案
點選 Sentis 預釋出包 或前往 Window > Package Manager,點選 + 圖示,選擇“Add package by name…”並輸入“com.unity.sentis”

將版本設定為 1.3.0
- 按下“新增”按鈕安裝包。

第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執行神經網路,我們需要遵循以下步驟。
使用Unity.Sentis名稱空間。
載入神經網路模型檔案。
為模型建立輸入。
建立推理引擎(一個worker)。
使用輸入執行模型以推斷結果。
獲取結果.
在我們的例子中,所有這些都將在SentenceSimilarity.cs檔案中完成,該檔案將附加到我們的機器人上。
在awake中,我們
載入我們的神經網路。
建立一個推理引擎(一個worker)。
建立一個運算子,它將允許我們對張量執行操作。

我們有三個函式
- Encode:接收玩家輸入(文字),進行分詞和嵌入。

- SentenceSimilarityScores:計算輸入嵌入(使用者輸入的內容)和比較嵌入(機器人動作列表)之間的相似度得分

- RankSimilarityScores:根據玩家輸入獲取最相似的動作及其索引

第4步:構建機器人行為🤖
我們需要定義機器人的行為。
我們的想法是,機器人有不同的可能動作,動作的選擇將取決於最相似的動作。
我們首先需要定義有限狀態機,這是一種簡單的經典AI技術,其中每個狀態定義一種特定的行為。
然後,我們將製作實用函式,用於選擇狀態以及要執行的一系列動作。
狀態機🧠🤖
在狀態機中,每個狀態代表一種行為,例如,移動到某一列,打招呼等。根據代理所處的狀態,它將執行一系列動作。
在我們的例子中,我們有7個狀態

我們首先需要建立一個名為 State 的列舉,其中包含所有可能的 State

因為我們需要不斷檢查狀態,我們使用 switch 系統在 Update() 方法中定義狀態機,每個 case 都是一個狀態。

對於每個狀態,我們定義了代理的行為,例如在我們的 Hello 狀態中,機器人必須朝玩家移動,正確面對他,然後啟動其 Hello 動畫,然後返回 Idle 狀態。

我們現在已經為每個不同的狀態定義了行為。這裡的魔力在於,語言模型將定義哪個狀態與玩家輸入最接近。然後在實用函式中,我們呼叫此狀態。
讓我們定義實用函式📈
我們的行動列表如下所示

該句子將被嵌入到AI模型中。
動詞是狀態
名詞(如果有)是互動物件(柱子、方塊等)
此實用函式將選擇與玩家輸入文字相似度得分最高的句子相關的動詞和名詞。
但首先,為了擺脫許多奇怪的輸入文字,我們需要設定一個相似度得分閾值。
例如,如果我說“看看那些兔子”,我們的任何可能行動都不相關。因此,我們不會選擇得分最高的行動,而是呼叫Puzzled狀態,該狀態將以困惑的動畫來動畫機器人。

如果分數較高,那麼我們將獲得與狀態對應的動詞和名詞(目標物件,如果有的話)。
我們將狀態設定為與動詞對應。這將啟用與該狀態對應的行為。

就這樣,現在我們準備好與我們的機器人互動了!
第5步:與機器人互動🤖
在這一步,你只需要點選編輯器中的播放按鈕。然後你就可以輸入一些指令並檢視結果!
這很棒!但最好的學習方式是嘗試、破壞和修改演示。
(可選)改進遊戲:新增新動作
新增新動作非常簡單。我們舉個例子
複製 YellowPillar 遊戲物件並移動它
將名稱更改為 GreenPillar
建立新材質並將其設定為綠色
將材質放置在 GreenPillar 上
現在我們已經放置了新的遊戲物件,我們需要將這種可能性新增到句子中並點選 Jammo_Player。
在動作列表中點選加號按鈕並填寫這個新的動作項

- 新增“前往綠色柱子”
- 前往
- 綠色柱子
就是這樣!你可以輕鬆迭代併為你的遊戲新增更多動作。
再次強調,別忘了測試相似度閾值,看看是否需要增加或減小它。
< > 在 GitHub 上更新