Skip to main content
Version: 1.7.2

多言語対応

さまざまな言語をサポートするために、ARSDK で提供する多言語サポート機能を使用できます。

多言語サポート要素

  • UnitySignPOI
  • UnityMapPOI
  • UnityInfoPanel

AMapper 多言語設定

多言語機能を使用するには、AMapper プロジェクトでどの言語を使用するかを設定する必要があります。プロジェクトをロードした状態で ESC キーを押すと、Locale を選択できる画面が表示されます。Primary は言語のデフォルト値で、AMapper では左側のアイテムリストに表示される言語で、ARSDK ではデフォルトで使用される言語です。以下の例は、英語と日本語を使用する場合の設定です。

alt text

Locale を追加すると、SignPOI、MapPOI、InfoPanel アイテム編集時に右側の Editable 画面で言語別の Label 値を設定できます。

alt text

ARSDK 多言語設定

ARPlaygroundLocale フィールドを活用すると、AMapper で設定した多言語データを読み込むことができます。

alt text

warning

Inspector で設定した Locale 値は Unity Editor でのみ設定されます。実際のデバイスでは、Application.systemLanguage に基づいて Locale 値が自動的に設定されます。

Item Prefab 設定

ARPlayground は設定された Locale 値を基準に、*.amproj ファイルに設定された言語データを読み込みます。読み込んだ言語データは、UnitySignPOIUnityMapPOIUnityInfoPanel を作成するときにテキストフィールドに割り当てられます。

デフォルトで提供される UnitySignPOIUnityMapPOIUnityInfoPanel では、ユーザーが設定した言語が正常に表示されないことがあります。

alt text

この場合、各要素の Prefab を直接構成してから ItemGenerator に割り当てる必要があります。

alt text

Prefab 設定は基本的に以下の手順に従います。

  • UnitySignPOIUnityMapPOI の場合

    1. /ARSDK/Core/Prefabs/Items パスの UnitySignPOI.prefab または UnitySignPOI.prefab をプロジェクトにコピー
    2. コピーした Prefab 内の TextMeshPro 要素の Font Asset を変更
    3. Font Asset が変更された Prefab を ItemGenerator 内の POIGenerator コンポーネントに割り当て
  • UnityInfoPanel の場合

    1. /ARSDK/Core/Prefabs/Items パスの UnityInfoPanel.prefab をプロジェクトにコピー
    2. コピーした Prefab 内の Text 要素の Font を変更
    3. Font が変更された Prefab を ItemGenerator 内の InfoPanelGenerator コンポーネントに割り当て

ランタイム言語設定

ARSDK は初期化時に Application.systemLanguage に基づいて Locale を自動的に検出し、言語データを読み込みます。ランタイムで言語を設定したい場合は、ARPlayground の Locale プロパティを使用できます。

m_ARPlayGround.locale = Locale.en_US;

ただし、任意の場所で上のように設定する場合、ARPlayground 内部のコード実行順序により、Locale 値が正常に適用されない可能性があります。Locale 値を正常に適用するには、locale を設定するコードが以下の 2 つの条件を満たす必要があります。

  1. Awake() ライフサイクル内で実行される必要があります
  2. コードを実行するクラスの DefaultExecutionOrder 値が -2000 以下である必要があります
// ARPlayground の Awake イベントより前に実行されるように設定。
[DefaultExecutionOrder(-2000)]
public class ARSDKExample : MonoBehaviour {

[SerializeField]
private ARPlayGround m_ARPlayGround;

/* ... */

private void Awake()
{
// Locale を設定。
m_ARPlayGround.locale = Locale.en_US;
}
}