Google Sheets経由で

Unity Localization Packageのデータを更新する



&ADXの多言語ボイス音声切り替え機能連携



株式会社ヘッドハイ

一條貴彰

自己紹介:一條貴彰
● 株式会社ヘッドハイ 代表

○ インディーゲーム開発者

■ 前作: 『Back in 1995』PS4 / Switch/ Xbox One / PC 

■ 開発中:『デモリッション ロボッツ K.K.』PC/ Switch 



● 著書

○ 「インディーゲーム・サバイバルガイド」 

○ 「Unity プログラミングバイブル2」の一部 

● 趣味

○ 日本のクラフトビールを呑みまくる 

○ クラフトビール友達募集中 

あらすじ

● 自作ローカライズ機能がぶっ壊れたので、Unity公式のローカライズパッケー
ジに乗り換えた

● Google Sheet経由でのデータ読み込みをしたかったので、その部分だけ解
説する

自作ゲームでの翻訳データの扱い(2020年頃まで)

1. Google Sheets上で翻訳作業&データ管理

2. Google Apps Script経由でUnityにデータエクスポート

3. Unity側でパースして言語ごとにScriptableObject化

4. ScriptableObjectをAssetBundle化

5. ゲーム起動時に選択された言語用のAssetBundleをロード

6. シーン上に配置されたボタンやテキストのスクリプトに

ILocalizeインターフェース実装クラス(自作)経由で言語データを渡す

Google Sheetのデータはこんな感じ

翻訳者のコメント
英語 中国語
日本語
内容説明 自前翻訳
(低品質)
翻訳者も便利に更新できるぜ、ところが

2020年12月?ごろにGoogle Apps Scriptが大幅更新

なぜかGoogle Sheetにあったスクリプトが全部消える

作り直すのはあまりにもだるい

Unity Localization Packageがあるぜ

移行するか、Unity Localization Packageに...

● バージョンが1.0.5に(まだpreviewではある)

● Google Sheet取り込みシステムが公式で用意された

○ 去年の7月にできたっぽい

● Google Sheet取り込みだけでなく、Editor上で編集してそれをSheet側へPush、と
かもできる

○ 自作で作ってなかった機能

Localization Package 基本機能と導入手順

● Unity Learning Materialsの
安原さんの動画を見れば完璧
● 「プロ必見!最新ローカライズ機能徹底
解説」
https://learning.unity3d.jp/7906/
Localization PackageとGoogle Sheet連携手順

Google Sheet利用方法のマニュアル

● Unity Manual:Localization Google Sheets

https://docs.unity3d.com/Packages/com.unity.localization@1.0/manual/Google-
Sheets.html

GCPで Google Sheets APIを有効にする

新しいプロジェクトを作って、

API ライブラリから
「Google Sheets API」
を検索して有効に

OAuthクライアントIDを作る

Google Sheets Serviceアセットを作る

Create -> Localization ->

Google Sheets Service

Client IDとClient Secretを設定

Authorizeをクリックして認証

String TableのExtensionsからGoogle Sheet Extensionを指定

Sheets Service Providerに先ほど作ったアセットを指定

Create New Spreadsheetで

Google Sheet上に新しいスプレッドシート
が生成される



シートのどの列が何の言語なのかを指定する

● Key Column

言語データを引っ張ってくるキーとなる値

● Key Comment Column

このキーのコメント欄



● Locale Column

何の言語の列か



● Locale Comment Column

言語ごとのコメント欄



● Include Comments

コメントを列ではなく吹き出しメモとして
シートに書きだす

Unity上で作ったデータをシートにPush

このデザインまでUnity側で作ってくれる

Localize String EventをTextと同じオブジェクトにアタッチ

書き換え先の文字列フィールド
を指定する必要あり。





Textコンポーネントの場合は
Text.textを指定

Unity Localization Packageと

ADXの多言語対応を連動させる

CRI ADXとUnity Localization Packageの多言語機能を連動

● CRI ADX

○ ゲーム開発環境のサウンド機能を拡張する

ツール&プラグインセット

■ Android遅延改善

■ フェードとかランダム再生

■ インタラクティブミュージック



○ 最近リブランドした

■ 「ADX2」→「ADX」

CRI ADXとUnity Localization Packageの多言語機能を連動

● CRI ADXはローカライズ機能を搭載

○ ボイスデータに言語バリアントを作れる

○ スクリプトから呼ぶデータ名を変えずに、ロードする圧縮パックデータを読み
替えるだけで言語切り替えを処理

○ 言語別のボイスデータをツール上で一括設定



○ ADX Toolsマニュアル「多言語対応」

■ https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_ato
mcraft_multi_language.html
● ここから先手順はADXユーザー向け
手順1:CRI Atom Craft側の設定

プロジェクトツリーの「言語設定」で必要な分の
言語を作成

マテリアルツリーで「ローカライズ用管理フォル
ダー」を作成する

「言語設定」で指定した分のフォルダができる

手順2:Atom Craft操作



各フォルダに同名のwavファイルを入れ、どちらかのwavでキューを作る

手順3:ビルド時に出力言語を指定



言語ごとにacbファイルができる

ファイル名は同一

en/voice.acb, ja/voice.acbといった感じ

手順4:出力されたデータをStreamingAssets下へ

手順5:言語切り替えの検出



LocalizationSettings .SelectedLocaleChanged += (locale) =>
{
  LoadCueSheet(locale.Identifier.Code);
};
var currentLocale = LocalizationSettings .SelectedLocale;
LoadCueSheet(currentLocale.Identifier.Code);
Unity Localization PackageではSelectedLocaleで現在の言語設定が取れる
SelectedLocaleChangedで言語設定が変わった時のコールバックを設定できる


手順6:acbの切り替え



private void LoadCueSheet(string localeCode)
{
if (CriAtom.GetCueSheet("voice") != null)
{
CriAtom.RemoveCueSheet ("voice");
}
CriAtom.AddCueSheet("voice",localeCode+"/voice.acb", null);
}
指定のフォルダ (ja/voice.acbとかen/voice.acb)からロードする
前に同名キューシートをロードしていたならアンロードしておく

まとめ

● Unity Localization Packageよい

● Google Sheetsからの取得だけではなく、更新もできる

○ 複数人開発だとルール作り必要そう

● ADX連携させるとボイスの切り替えもまとめてできてお得

○ 音声と字幕は別々に設定するというのももちろんありえる

● 課題(まだ作ってないので今後テスト)

○ AssetBundle化&手動ロード

○ スクリプトから翻訳データを読み出す

ご清聴ありがとうございました

インディーゲーム「開発者」向けニュースサイト

開発技術・マーケティング・書籍

パブリッシング・イベント

コンテスト・便利なツールなどなど



ゲーム開発に役立つ

情報を日々配信!





https://indiegamesjp.dev/

Google Sheets経由でUnity Localization Packageのデータを更新する & ADXの多言語ボイス音声切り替え機能連携