最終更新:
orika_ex_miyako 2024年12月26日(木) 14:31:42履歴
ゲーム内に言語設定を用意し、この設定を切り替えると、画面の再読み込みを行わず、動的に表示される文字の言語切り替えを行います。
<完成動画>

Project 内に Datas フォルダなどを作成し、そのフォルダ内にLocalizeMasterDataSO スクリプタブル・オブジェクトを作成します。
任意の情報を登録してください。
あるいは、スプレッドシートの情報をそのままスクリプタブル・オブジェクトに取り込む方法を実装してください。
=> スプレッドシートのシート別の情報を異なるスクリプタブル・オブジェクトに取り込む
Unity 内に Json データを取り込む際、JsonHelper クラスを利用します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using System.Text;
public class JsonHelper {
/// <summary>
/// Jsonファイルをstringで読み込む
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static string GetJsonFile(string filePath, string fileName) {
string fileText = "";
// JsonFileを読み込む
FileInfo info = new FileInfo(Application.streamingAssetsPath + filePath + fileName);
try {
// 一行毎読む込み
using (StreamReader reader = new StreamReader(info.OpenRead(), Encoding.UTF8)) {
fileText = reader.ReadToEnd();
}
} catch (Exception e) {
// 改行コード
fileText += e + "\n";
}
//Debug.Log(fileText);
return fileText;
}
public static List<T> ListFromJson<T>(string json) {
var newJson = "{ \"list\": " + json + "}";
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(newJson);
return wrapper.list;
}
[Serializable]
class Wrapper<T> {
public List<T> list;
}
}
シングルトンクラスとして作成しています。
現在ゲーム内で選択している言語設定を保持したり、PlayFab のタイトルデータの情報を取得し、Unity 内でキャッシュしておくためのクラスです。
サーバーを利用する場合、スクリプタブル・オブジェクトの代わりに、専用のクラスでローカライズ対応用の情報を保持しておきます。
PlayFab へのログイン処理や、タイトルデータから情報を取得する処理自体についてはここでは省略しています。
記事が多く出ていますので、それらを参考に実装してください。
enum である Language 型の情報を ReactiveProperty で用意していますので、こちらの情報を購読することにより、ゲーム内での動的な言語切り替えを表現します。
ゲームを実行して動作を確認します。
PlayFab の場合、ログイン後、タイトルデータからローカライズ対応用のマスターデータを取得し、
StringManager クラスにキャッシュしておきます。

ゲーム内で利用する LocalizeText ゲームオブジェクトには、タグの設定が出来ますので、
そちらを任意のタグに設定します。
そのようにしておくことで、LocalizeMasterData 内のタグと照合し、表示する内容を自動化できます。
同時に言語切り替え時のローカライズ対応も可能になります。

<実装動画>

以上で完成です。
ここまでで文字列をそのままローカライズする場合については処理は終了です。
文字列内の情報をゲーム内の情報を参照して、1つの文字列を作る場合には、引き続き、ローカライズ対応の実装を行います。
例えば「こんにちは ○○ さん」のような、○○部分がゲーム内の情報に依存する文字列をローカライズ対応するケースです。
=> ローカライズ対応の実装例��







コメントをかく