はじめに
概要
作品名 | Ideal Girlfriend |
制作期間 | 2023.11.19~2023.12.03 (15日) |
制作形式 | 自主制作 |
リンク
プレイ動画
音量あり推奨
内容
出来るようになった事
- 「伸縮アンカー」を使用した、UIの位置と大きさの設定
- 「Image.PixelsPerUnitMultiplier」を使用した、UIの丸みの取得と設定
- 「SkinnedMeshRenderer.GetBlendShapeWeight()」を使用した、ブレンドシェイプの現在値の取得
- 「SkinnedMeshRenderer.SetBlendShapeWeight()」を使用した、ブレンドシェイプの値の設定
- 「string.Contains()」を使用した、「文字列中に特定の文字列が含まれているかどうか」の取得
- 「PlayerPrefs.DeleteAll()」を使用した、全てのセーブデータの削除
- 「Dictionary<>」を使用した、連想配列の宣言
- 「JsonUtility.ToJson()」を使用した、オブジェクトのJSON形式への変換
- 「UnityWebRequest」を使用した、ウェブリクエストの宣言
- 「UploadHandlerRaw」を使用した、ウェブリクエストの送信形式の設定
- 「Encoding.GetBytes()」を使用した、文字列からバイナリデータへの変換
- 「DownloadHandlerBuffer」を使用した、ウェブリクエストの受信形式の設定
- 「KeyValuePair<>」を使用した、「foreach」での連想配列の値の格納
- 「UnityWebRequest.SetRequestHeader()」を使用した、ウェブリクエストへのヘッダーの設定
- 「UnityWebRequest.SendWebRequest()」を使用した、ウェブリクエストの送信
- 「throw」を使用した、例外の送信
- 「UnityWebRequest.result」を使用した、ウェブリクエストの送信結果の取得
- 「Debug.LogError()」を使用した、エラーの表示
- 「JsonUtility.FromJson()」を使用した、JSON形式からの変換
- 「UnityWebRequest.downloadHandler」を使用した、ウェブリクエストの受信内容の取得
- 「UnityWebRequest.downloadHandler.text」を使用した、ウェブリクエストの受信内容の string 型での取得
- 「#if/#else/#end if」を使用した、条件付きコンパイルの設定
- 「[DllImport]」を使用した、DLLのインポート
- 「extern」を使用した、外部関数の宣言
- 「[Preserve]」を使用した、ビルド時のメソッドの削除の防止
- 「DownloadHandlerAudioClip」を使用した、ウェブリクエストの受信形式の「AudioClip」への設定
- 「DownloadHandlerAudioClip.GetContent()」を使用した、ウェブリクエストの受信内容からの AudioClip の取得
- 「CanvasGroup」を使用した、UIのグループ化
- 「AddListener()」を使用した、イベントリスナーの設定
- 「CancellationTokenSource.Cancel()」を使用した、UniTask の停止
- 「string.Replace()」を使用した、文字列からの特定の文字列の置換
- 「Debug.LogException()」を使用した、例外の表示
- 「ColorUtility.TryParseHtmlString()」を使用した、カラーコードからの Color の取得
- 「RectTransform.sizeDelta」を使用した、UIのサイズの取得と設定
- 「RectTransform.anchoredPosition」を使用した、UIのアンカーを考慮した座標の取得と設定
- 「UniTask.WaitUntil()」を使用した、条件による UniTask の待機
- 「TextMeshProUGUI.textInfo.lineCount」を使用した、テキストの行数の取得
- 「CanvasGroup.alpha」を使用した、UIのグループの透明度の取得と設定
- 「not」を使用した、型の比較の反転
- 「AudioSource.isPlaying」を使用した、「音を再生中かどうか」の取得
- 「AudioSource.Play()」を使用した、音の再生
- 「AudioSource.Stop()」を使用した、音の停止
- 「TextAsset.text」を使用した、テキストファイル内のテキストの取得
工夫した点
- GPTやTTS(Text To Speech)のレスポンスを取得するメソッドで戻り値を「UniTask<>」にした事で、非同期で任意の戻り値を取得できるようにした
- 「UniTask.WaitUntil()」を使用する事で、テキストの行数を正確に取得するまで待機した
- 「(a, b) = (b, a);」と記述する事で、2つの変数の値の入れ替え処理の記述を簡略化した
- ウェブリクエストを送信した際に発生し得る例外とその例外が発生した際に表示するテキストをスクリプタブルオブジェクトで管理した事で、エラーハンドリングのカスタマイズ性を上げた
- 全てのUIの角に丸みを帯びさせた事で、柔らかい印象にした
- 非同期処理中にローディングアニメーションを再生する事で、ユーザーの離脱を抑えた
- 会話シーンでGPTからの回答を表示するピンクのUIの高さを動的に変更する事で、UIに隠れるアバターの面積を極力減らした
- モバイルブラウザからテキストを入力する際、DLLを利用してポップアップを表示する事で、モバイルのキーボードに関する処理を書かなくても済むようにした
- 初期化コマンド(cmd reset)を有効にしておく事で、APIキーの変更などにも対処できるようにした