📘

Unityでシナリオの記載されているGoogleSheetからシナリオデータとVOICEVOXを使ってキャラボイスを自動更新を行う

2023/03/11に公開

概要

MidraLabで作成した ひと時の旅の物語を5分で楽しめるビジュアルノベル 「Meow the mule」を公開した。

https://unityroom.com/games/meow_the_mule

今回の制作ではシナリオ管理はGoogle Sheetで行い、VOICEVOXを用いてキャラクターのボイスを自動生成しています。
今回の制作では、Unityでのシナリオの更新及びキャラボイスの更新を自動化を行いました。Google Sheetでキャラセリフが管理されている場合に、UnityとGoogle SheetおよびVOICEVOXを連携してシナリオおよびキャラボイスの自動更新を行う連携を行いました。
連携した内容の紹介を行います!

MiraLabでは インディーズゲーム向け ADVフレームワーク「easy-adv-framework」を作成しています。今後フレームワークにして公開する予定ですので、公開時には是非ご利用ください。

制作環境

デモ

全体の処理の流れは以下の通りです。

解決した課題

  • ADVでのシナリオデータの管理
  • Unityでのシナリオデータの更新及びキャラボイス管理の工数
  • シナリオライターとエンジニアのコミュニケーションコスト

全体の制作の流れ

実際にどのような制作フローを行ったのかを説明していきます。実装の詳細は省きますので、ご了承ください
(フレームワーク公開時に説明させていただきます)

1. Google Sheetでシナリオデータを作成

まずは以下のようにシナリオライターの方に Google Sheetにシナリオデータを記載していただきます。

このときに、以下のように使用する画像や音声ファイルを特定のフォルダに入れることで、プルダウンから選択できるようになっています。

この際にプルダウンは特定のフォルダからファイル一覧を以下のように取得してプルダウンの項目を更新できるようにしています。
これによって素材ファイルをアップロードする人とシナリオデータを書く人がお互いのコミュニケーションコストを下げることができます。

function UpdateAllPulldownValues(){
    const sheet = SpreadsheetApp.getActiveSpreadsheet();
    UpdatePulldownValues(sheet,characterImageFolder,'D2:D100')
    UpdatePulldownValues(sheet,backgroundImageFolder,'E2:E100')
    UpdatePulldownValues(sheet,soundFolder,'F2:F100')
    
}

function UpdatePulldownValues(sheet,folderId,range){
  let fileName = GetAllFiles(folderId);
  
  //入力規則を作成
  const rule = SpreadsheetApp.newDataValidation().requireValueInList(fileName).build();
  
  //リストをセットするセル範囲を取得
  const cell = sheet.getRange(range);
  
  //セルに入力規則をセット
  cell.setDataValidation(rule);

}

function GetAllFiles(folderId){
  let folder = DriveApp.getFolderById(folderId);
  let files = folder.getFiles();

  let fileNames = []
  while(files.hasNext()){
  
    var file = files.next();
    fileNames.push([file.getName()])
  }
  console.log(fileNames)
  return fileNames;
}

2. Unityでシナリオデータを更新

シナリオの更新は UpdateScenarioFromGoogleSheetスクリプトを特定のオブジェクトにアタッチして、Inspectorのボタンを押すことで実行することができます。

Unity側でのシナリオ実装には Fungusを使用しているため、更新後は以下のようにFungusのFlowchart内にシナリオデータが反映されます。

3. Unityでキャラボイスの更新

Unityでシナリオデータを更新時にキャラボイスも自動でセリフデータに基づいて、更新できるようにしています。
キャラボイスの生成には、VOICEVOXをローカルで立ち上げてAPI経由で文字列から音声を取得しています。

この際にFlowchart内の各セリフコンポーネントと音声データが以下のように紐づくように処理を行っています

おわりに

インディーズゲームでは時間と人が足りない中で、ゲームの制作を行うことが多いと思います。そのため、より効率的に簡単に制作できるワークフローを作っていければと考えています。

これからいくつかコミュニティ内でワークフローを検証しつつより使いやすいフレームワークを作成を行っていきます。

MidraLab(ミドラボ)

Discussion