Unityに関連する記事です

 前回に引き続き、多言語対応(ローカライズ対応)の実装例について紹介します。

 ゲーム内に言語設定を用意し、この設定を切り替えると、画面の再読み込みを行わず、動的に表示される文字の言語切り替えを行います。


<完成動画>





1.LocalizeMasterData クラスの作成


 Json 形式のファイルや、スクリプタブル・オブジェクト用のデータを取得してゲーム内で利用するためのクラスを用意します。
System.Serializable 属性を忘れずに付与してください。


LocalizeMasterData.cs

<= クリックすると開きます


 次の手順は、マスターデータを管理する方法によって異なります。
実装方法により、【2】か【3】のいずれかに進んでください。


2.言語のマスターデータ管理にスクリプタブル・オブジェクトを利用する場合

1.LocalizeMasterDataSO クラスの作成


 先ほど作成した LocalizeMasterData を List で管理する、スクリプタブル・オブジェクトを作成します。


LocalizeMasterDataSO.cs

<= クリックすると開きます



2.LocalizeMasterDataSO スクリプタブル・オブジェクトの作成


 Project 内に Datas フォルダなどを作成し、そのフォルダ内にLocalizeMasterDataSO スクリプタブル・オブジェクトを作成します。

 任意の情報を登録してください。

 あるいは、スプレッドシートの情報をそのままスクリプタブル・オブジェクトに取り込む方法を実装してください。


  => スプレッドシートのシート別の情報を異なるスクリプタブル・オブジェクトに取り込む


3.言語のマスターデータ管理にクラウドを利用する場合


 ここでは PlayFab を利用した例を提示します。


1.PlayFab のタイトルデータに Json データを登録する


 PlayFab の GameManager 画面から コンテンツ → タイトルデータを選択し、新しいタイトルデータを作成します。
Key には LocalizeMasterData と登録し、Value には前回の手順で Json 形式で書き出している内容をそのまま貼り付けます。









2.JsonHelper スクリプトの作成


 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;
    }
}



3.StringManager クラスの作成


 シングルトンクラスとして作成しています。

 現在ゲーム内で選択している言語設定を保持したり、PlayFab のタイトルデータの情報を取得し、Unity 内でキャッシュしておくためのクラスです。
サーバーを利用する場合、スクリプタブル・オブジェクトの代わりに、専用のクラスでローカライズ対応用の情報を保持しておきます。

 PlayFab へのログイン処理や、タイトルデータから情報を取得する処理自体についてはここでは省略しています。
記事が多く出ていますので、それらを参考に実装してください。

 Language 型の情報を ReactiveProperty で用意していますので、こちらの情報を購読することにより、ゲーム内での動的な言語切り替えを表現します。


<= クリックすると開きます




4.LocalizeText クラスの作成


 ここからは共通の実装処理になります。

 ローカライズ対応したい TextMeshPro コンポーネントや TextMeshProUGUI コンポーネントを制御するためのクラスです。
このクラスも、それらのコンポーネントと同じゲームオブジェクトにアタッチして利用します。

 このクラス内で StringManager クラスの ReactiveProperty<Language> 型の CurrentLanguage 変数を購読し、
言語の切り替えが発生したタイミングで、画面の表示更新を行い、新しい言語に対応した表示を自動的に行うように紐づけています。


<= クリックすると開きます




5.LocalizeText ゲームオブジェクトの作成とプレハブ化


 先ほど作成した LocalizeText スクリプトをアタッチして、言語表示を行うためのゲームオブジェクトを作成します。
すでに作成済の場合には、スクリプトをアタッチしてください。




 完成したらプレハブ化しておきます。

 あとは、ゲーム内で利用するすべての言語表示に、こちらのプレハブを利用するようにしてください。

 そうすれば、言語表示の切り替え機能だけではなく、アウトラインなどのエフェクト、フォントの差し替え対応も一括で変更可能です。


6.実装例


 ゲームを実行して動作を確認します。

 PlayFab の場合、ログイン後、タイトルデータからローカライズ対応用のマスターデータを取得し、
StringManager クラスにキャッシュしておきます。






 ゲーム内で利用する LocalizeText ゲームオブジェクトには、タグの設定が出来ますので、
そちらを任意のタグに設定します。

 そのようにしておくことで、LocalizeMasterData 内のタグと照合し、表示する内容を自動化できます。
同時に言語切り替え時のローカライズ対応も可能になります。





<実装動画>



 以上で完成です。



 ここまでで文字列をそのままローカライズする場合については処理は終了です。

 文字列内の情報をゲーム内の情報を参照して、1つの文字列を作る場合には、引き続き、ローカライズ対応の実装を行います。

 例えば「こんにちは ○○ さん」のような、○○部分がゲーム内の情報に依存する文字列をローカライズ対応するケースです。

  => ローカライズ対応の実装例

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます