ChatGPTはアプリケーションと連携する目的でAPIキーを発行しています。そして、Unityと連携をすれば、キャラクターの性格を踏まえた会話や感情表現などができるため、よりリアルなキャラクター制作が可能です。そこで、今回はChatGPTとUnityを連携させることでできること、具体的な手順、AI搭載のキャラクターを作成する方法について解説します。
ChatGPT APIを使ってとUnityと連携しよう
ChatGPTとは、米国のOpenAIが開発した対話型AIです。自然言語処理に基づくコンピュータープログラムであり、言語モデル『GPT(Generative Pre-trained Transformer)』が採用されています。日本では、約100万人以上が利用しているとされており、今話題のAIチャットボットです。
ChatGPTは、Webサイトから使用することができますが、API(プログラム同士をつなぐインターフェース)キーを発行しているため、ほかのアプリケーションと連携させることができます。そして、今回のテーマであるUnityと組み合わせることで効率的によりリアルなキャラクター作成が可能です。
Unityは、3DゲームやVR、ARのアプリケーション開発に用いられるプラットフォームです。C#やJavaScriptなどのプログラミング言語で構築することができ、C++を使用した開発に比べて3Dゲーム構築ハードルが抑えられています。シンプルな操作性や拡張性の高さが主な特徴です。Unityに関する詳しい解説は『Unity入門!チュートリアルで学ぶ2Dアクションゲームの作り方』を参照してください。
ChatGPTのAPIは、OpenAI社によって2023年3月に公開されました。APIとは、ほかのアプリケーションと連携するために開発元が提供するプログラム及びシステムのことです。
例えば、APIがあることで、Twitterのトレンド情報を取得したり、特定のユーザーのフォロワーなどをプログラムで取得したりして、自身のアプリケーションに活用することができます。わかりやすく表現すると外部サービスの機能を共有できるインターフェースです。APIに関する詳しい解説は、『Web開発に役立つAPI連携とは?利用するメリットや実装手順を紹介』を参照してください。
そして、ChatGPTのAPIを取得し、Unityと連携させればUnityで開発するプログラムの中でChatGPTの機能を使用することができます。AIキャラクターを作成する場合、非常に効率的になるため開発者にとって大きなメリットです。
ChatGPTやUnityについて動画で体系的に学びたい方は、ぜひUdemyの講座を下記のリンクから 探してみてください。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >ChatGPTとUnityを組み合わせてできること
ChatGPTとUnityを組み合わせることでできることは、大まかにわけて2つです。具体的にできることを詳しく解説します。
キャラクターの性格に合わせた話し方を実現できる
1つ目は、キャラクターの性格に合わせた話し方ができる点です。
ChatGPTは、事前に語尾や性格などの前提条件を指定すると、それに合わせて応答してもらうことができます。また、キャラクターとの会話を保存することもできます。これにより、文脈を汲み取ったリアルな会話を実現することも可能です。
会話に合わせてキャラクターの表情を変えられる
2つ目は、会話の内容に合わせてキャラクターの表情を変化させられることです。
あらかじめChatGPTに感情を数値化するように指示を出します。例えば、感情パラメーターを喜怒哀楽の4つの種類に設定し、それを数値で表すように指示を送ります。喜びの数値が大きい場合、キャラクターの表情を笑顔にしたり、怒りの数値が高いなら怒った表情に変化させたりすることが可能です。また、出力形式を指定することもできるため、Unityでも扱いやすいJSON形式で出力させることもできます。
ChatGPTとUnityの連携手順
ChatGPTとUnityを連携させるためには、まずChatGPT側でAPIキーを取得する必要があります。その後に、クラスを定義するという流れです。それぞれの連携手順を詳しく解説しますので、UnityにChatGPTを組み合わせて使用したいという方は、ぜひ参考にしてください。
API Keyの発行
はじめに、API Keyを発行する必要があります。具体的な手順は下記の通りです。
1.まずは「サイト」にアクセスします。
2.すでにアカウントを作成しているという方は『Log in』、これからアカウントを作成する人は『Sign up』をクリックしてください。
3.ログインすることができたら、『+Create new secret key』をクリックします。
4.新しいシークレットキー作成のポップアップが表示されるため、シークレットの名前を入力してください。
5.『Create scret key』のボタンをクリックするとAPIキーが表示されるので、コピーするようにしてください。また、このAPIキーは今後二度と表示されませんので、必ずコピーするようにしましょう。
6.実際に、APIキーを作成することができました。
7.APIは利用料に応じて課金されます。そのため、使いすぎると大きな金額になるので、あらかじめ『Usage limits』を設定し、上限額の設定を行ってください。
クラスを定義する
ChatGPTとUnityを連携させるためには、APIとやり取りするクラスとモデルを定義するクラスの2つを用意します。しかし、今回はよりわかりやすく表現するため、クラスをひとつのファイルにまとめさせていただきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
using System; using System.Collections.Generic; using System.Text; using UnityEngine; using UnityEngine.Networking; public class UdemyTestChat : MonoBehaviour { #region 必要なクラスの定義など [System.Serializable] public class MessageModel { public string role; public string content; } [System.Serializable] public class CompletionRequestModel { public string model; public List<MessageModel> messages; } [System.Serializable] public class ChatGPTUdemyModel { public string id; public string @object; public int created; public Choice[] choices; public Usage usage; [System.Serializable] public class Choice { public int index; public MessageModel message; public string finish_reason; } [System.Serializable] public class Usage { public int prompt_tokens; public int completion_tokens; public int total_tokens; } } #endregion private MessageModel assistantModel = new() { role = "system", content = "あなたは学校の先生です。" }; private readonly string apiKey = "APIキーを入力してください。"; private List<MessageModel> communicationHistory = new(); void Start() { communicationHistory.Add(assistantModel); MessageSubmit("おはようございます"); } private void Message(string newMessage, Action<MessageModel> result) { Debug.Log(newMessage); communicationHistory.Add(new MessageModel() { role = "user", content = newMessage }); var apiUrl = "https://api.openai.com/v1/chat/completions"; var jsonOptions = JsonUtility.ToJson( new CompletionRequestModel() { model = "gpt-3.5-turbo", messages = communicationHistory }, true); var headers = new Dictionary<string, string> { {"Authorization", "Bearer " + apiKey}, {"Content-type", "application/json"}, {"X-Slack-No-Retry", "1"} }; var request = new UnityWebRequest(apiUrl, "POST") { uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(jsonOptions)), downloadHandler = new DownloadHandlerBuffer() }; foreach (var header in headers) { request.SetRequestHeader(header.Key, header.Value); } var operation = request.SendWebRequest(); operation.completed += _ => { if (operation.webRequest.result == UnityWebRequest.Result.ConnectionError || operation.webRequest.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError(operation.webRequest.error); throw new Exception(); } else { var responseString = operation.webRequest.downloadHandler.text; var responseObject = JsonUtility.FromJson<ChatGPTRecieveModel>(responseString); communicationHistory.Add(responseObject.choices[0].message); Debug.Log(responseObject.choices[0].message.content); } request.Dispose(); }; } public void MessageSubmit(string sendMessage) { Message(sendMessage, (result) => { Debug.Log( result.content ); }); } } |
今回は、キャラクターを学校の先生として設定しています。Unityで実行するとChatGPTから返答が得られているのがわかります。
UnityでAI搭載のキャラクターを作成する方法
UnityでAI搭載のキャラクターを作成する方法をご紹介します。
感情・性格を設定する
感情を設定するときは、ChatGPTに対してJSON形式でエモーションの設定を渡します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private MessageModel assistantModel = new() { role = "system", content = @" { emotion: { joy: 0~3, fun: 0~3, anger: 0~3, sad: 0~3, } message: ""会話の文章"" } " }; |
次に、Emotionクラスを別途用意します。
1 2 3 4 5 6 7 |
public class Emotion { public int joy; public int fun; public int anger; public int sad; } |
ChatGPTからJSONデータを取得したら分岐を行いそれぞれの喜怒哀楽で適切なメソッドを実行します。
性格を設定するときは、下記のコードのcontent内に事前に伝えておきます。『あなたは優しい性格です。』などと入力することで、性格を事前に決めることが可能です。
1 2 3 4 5 |
private MessageModel assistantModel = new() { role = "assistant", content = "あなたは優しい性格です。" }; |
また、roleは役割のことで、system・user・assistantに3種類から選択可能です。userはユーザーからの発話、assistantはユーザーの発話に対するAIの返答を意味します。
声を設定する
AIキャラクターの声は、VOICEVOXという無料読み上げソフトを使用するのがおすすめです。VOICEVOXには、事前にさまざまなキャラクターが準備されているため、お好みのものを選択することができます。
VOICEVOXをインストールして立ち上げるとAPIサーバーが利用できるようになります。HTTP経由で声を取得することが可能です。
口パクを設定する
キャラクターの口パクを設定するためには、OVRLipSyncを利用します。
また、AudioSourceを指定することで、マイクの音声等がなくても口パクをすることが可能です。しかし、OVRLipSyncを利用する場合は、VOICEVOXを利用するのが前提になります。
今回は、ChatGPT APIを使用してUnityと連携し、AIキャラクターの作成方法について解説しました。ChatGPTのAPIを利用することで、AIキャラクター開発の負担を大幅に減らすことができます。また、APIは無料期間があるため、はじめは無償で誰でも利用することが可能です。ぜひこの機会にChatGPTとUnityを連携させて自身のAIキャラクターを作成してみてください。
最新情報・キャンペーン情報発信中