そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】多言語化パッケージ Localization iOS ATT説明文 多言語化

環境

Unity 2022.3.10f1 (シリコン)
Localization 1.4.5

はじめに

iOSでのATT対応は以下の内容で設定していました。
marumaro7.hatenablog.com Localizationパッケージを使用することで
Xcodeで設定していたATTウインドウ説明文を
Unity側で事前に設定可能であるため備忘録として残しておきます。



Localizationパッケージの導入とアプリ名の多言語化が済んでいる前提で話を進めます。

Localizationパッケージの導入 marumaro7.hatenablog.com

Localizationパッケージによるアプリ名変更 marumaro7.hatenablog.com

設定方法

ATT説明文の多言語化はテキスト変更と同様で
Localization Tablesで登録した内容のキーを割り当てることで実現します。

Localization Tablesの表示方法
→ウインドウ
→アセット管理
→Localization Tables

今回は以下の内容で登録します。
キー:ATT
英語:ATTTest
日本語:ATTテスト



そして、ATT文の多言語化
iOSのMetadataのUser Tracking Usage Descriptionで設定します。
→編集
→プロジェクト設定
→Localization
→Metadata
iOS App info
→User Tracking Usage Description

用意したキーを設定することで設定完了です。

おわりに

これまでXcodeで設定していたのは次の2つでした。
1.Info.plistに「Privacy - Tracking Usage Description」を追加
2.「AppTrackingTransparency.framework」を追加

今回設定したのは1番の内容のみであるため
2.「AppTrackingTransparency.framework」の追加はXcodeで設定が必要です。

本を出版しました

marumaro7.hatenablog.com

【Unity】多言語化パッケージ Localization アプリ名多言語化 Android/iOS

環境

Unity 2022.3.10f1 (シリコン)
Localization 1.4.5

はじめに

Localizationパッケージを使用したAndroid/iOSのアプリ名多言語化になります。
パッケージ導入は完了している前提でご説明します。
対象言語:日本語、英語

導入方法 marumaro7.hatenablog.com

事前準備

アプリ名の多言語化はテキスト変更と同様で
Localization Tablesで登録した内容のキーを割り当てることで実現します。

Localization Tablesの表示方法
→ウインドウ
→アセット管理
→Localization Tables

今回は以下の内容で登録します。
キー:AppName
英語:ABC
日本語:エービーシー


設定方法

Android/iOS共通

Android/iOSいずれも下記のMetadataで設定します。
→編集
→プロジェクト設定
→Localization
→Metadata「+」ボタン

Android アプリ名設定

次の手順でApp infoを表示します。
→Metadata「+」ボタン
Android
→App info


Android App Info」が追加されます。
こちらを左のタブをクリックして展開し、ディスプレイ名にキーを割り当てます。
今回はAppNameのキーを作成しているためこちらを割り当てます。

]

適用後はこちらのようになります。 ]

以上で完了です。

iOSアプリ名設定

次の手順でApp infoを表示します。
→Metadata「+」ボタン
iOS
→App info

次のように複数の設定項目が表示されます。
Androidと同様にディスプレイ名の設定を行うことで設定完了です。

設定後

以上で完了です。

おわりに

iOSの方では、手動で設定しようとするとXcodeで設定が必要でしたが
その操作も自動で設定してくれるためとても便利ですね。

手動の設定内容 marumaro7.hatenablog.com

本を出版しました

marumaro7.hatenablog.com

関連記事

marumaro7.hatenablog.com

【Unity】多言語化パッケージ Localization 導入方法 テキスト変更 テキスト動的変更

環境

Unity 2022.3.10f1 (シリコン)
Localization 1.4.5

はじめに

先日スマホアプリの多言語化対応にあたり、
Unity公式の多言語化パッケージLocalizationを使用しました。

そこで得たつまづきポイント、便利機能の使い方を備忘録としてまとめます。
本記事で扱うのは以下の内容となります。

・導入方法
・テキストの多言語化
・テキストの動的多言語化

導入方法

パッケージインストールと初期設定に分けてご説明します。

パッケージインストール

まずは、パッケージのインストールを行います。
→ウインドウ
→パッケージマネージャー
→「パッケージ:Unityレジストリ」へ変更
→検索窓に「local」と入力
→Localization パッケージが絞り込まれて表示されるためこちらをインストール
※AddressablesパッケージとNewtonsoft Jsonパッケージが併せてインストールされます。

初期設定

初期設定の内容は次の3つです。
・Localization設定ファイルの作成
・対象言語の設定
・デフォルト言語の設定

Localization設定ファイルの作成

Localizationパッケージを使用するためには、
最初に設定ファイルの作成が必要となっています。
→編集
→プロジェクト設定
→Localization
→Create



Createを押すとファイルの保存画面になります。
他にも多言語化関係のファイルが作成されるため
専用のフォルダを作成し、そこに保存すると良いでしょう。
今回は、Assets内に「Localization」というフォルダを作成し保存しました。

対象言語の設定

次に多言語化する言語を設定します。

以下のような画面に変化しますので「Local Generator」を押下します。



対象言語の設定画面が表示されます。
今回は英語と日本語を対象としたいためこれらにチェックを付け、
「Generate Locales」を押します。



作成したファイルを保存するフォルダを選択する画面になりますので
先ほど作成した「Localization」フォルダを指定し保存します。
(追記)「Localization」フォルダの中に
    「SelectedLanguages」というフォルダを作った方が
     フォルダ内が散らからずにすみそうです。

選択した言語が画像のように表示されているはずです。

以下のようなエラーが発生するかもしれませんが無視します。

デフォルト言語の設定

デフォルトの言語を設定します。

「Specific Locale Selector」の「Local id」と
「Project Local Identifier」の項目をデフォルトとしたい言語に設定します。
設定方法は右側のボタンを押し、言語を選択します。

今回は英語をデフォルトとして設定しています。

テキストの多言語化

導入ができましたのでテキストの多言語化を行います。
対象のテキストは、以下のテキストを使用します。
→UI
→古い機能
→テキスト

設定手順

テキスト多言語化における基本の手順としては次の3ステップです。
1.キーとキーに対する各言語内容を設定する
2.テキスト系のコンポーネントが付いたオブジェクトにLocalizeコンポーネントを追加する
3.Localizeコンポーネントに対応するキーを割り当てる


たとえば、"A"というキーに対して
日本語:こんにちは 
英語;Hello
という具合に対となるものを用意します。
そして、テキストに"A"というキーを割り付け、
言語によって対応した内容に変えるという内容です。
言葉ではよくわからないと思いますので実際にやっていきます。

1.キーとキーに対する各言語内容を設定する

まずはキーとその内容の登録画面を開きます。
→ウインドウ
→アセット管理
→Localization Tables



次に、「New Table Collection」タブをクリックし、対応表を新規作成します。
こちらはエクセルでいうところのシートを作成するイメージです。
テキストを管理するシート、オーディオを作成するシート、画像を管理するシート
といった具合に多言語化する対象で分けて作成します。

今回はテキストを管理したいため、
Typeを「String Table Collection」に設定し
「TextTable」という名前で作成します。(名前はお好きな名前で問題ありません。)



Createを押すと保存先を選択する画面になりますので
Localizationフォルダを選択します。
(追記)「Localization」フォルダの中に
    「TableCollections」というフォルダを作り
     さらにその中に「StringTables」というフォルダを作成して
     選択するとフォルダ内が散らからずにすみそうです。


その後、「Edit Table Collection」のタブに表示が切り替わるため
こちらでキーとキーに対する内容を登録していきます。


今回は以下の内容で登録します。
キー:TitleText
英語:AAAAA
日本語:ああああああ


さらにキーと内容を追加したい場合は「Add New Entry」を押すことで追加が可能です。

2.Localizeコンポーネントを追加する

ここからテキストのインスペクター上での作業になります。

以下の手順でLocalizeコンポーネントを追加します。
→多言語化したいテキストを選択
→インスペクター上のテキストコンポーネント右上のボタン(点が縦に3つに並んだアイコン)
をクリック
→「Localize」を選択


すると、以下のように「Localize String Event」コンポーネントが追加されます。

3.Localizeコンポーネントに対応するキーを割り当てる

あとは簡単で「String Reference」へ割り当てたいキーを選択するだけです。

今回は「Title Text」のキーを割り当てます。

選択後、テキストが変更不能となり事前に設定した内容に変化します。

以上が設定手順となります。

確認

実行して確認します。
実行するとゲームビューの右上にボタンが出現し言語を切り替えることが可能です。


日本語に変更すると”あああああ”と表示されます。
以下の内容で設定できていることが確認できました。
キー:TitleText
英語:AAAAA
日本語:ああああああ

実行時以外で言語を切り替える方法

制作中において、実行せずに言語を切り替えたい場合が多くあります。
そのような時は、次のウインドウで切り替えが可能です。
→ウインドウ
→アセット管理
→ Localization Scene Controls


Localization Scene ControlsのActive Localeの言語を変更することで設定変更が可能です。

この切り替えはよく使用するため Localization Scene Controlsの画面をUnityエディター上に固定してしまうのがおすすめです。

タブをドラッグ&ドロップ

Unityエディター上に常時配置

テキストの動的多言語化

文字と数字の組み合わせのテキストですと実行中に値を更新したくなります。
先ほどのテキスト変更に加え手順が増えますが対応可能です。

設定手順

手順としては次の4つのステップです。
1.テーブル内容の登録時にSmartのチェックボックスにチェックを入れる
2.変数を{}で囲み登録する
3.Localizeコンポーネントに変数を登録する
4.スクリプトで更新する

今回は以下の内容で登録していきます。
XXXは変化させる変数です。
キー:Count
英語:Count XXX
日本語:数 XXX

1.テーブル内容の登録時にSmartのチェックボックスにチェックを入れる

Localization Tablesの設定時にSmartのチェクボックスにチェックを入れます。
こちらは慣れてくると忘れがちになるので注意してください。

2.変数を{}で囲み登録する

XXXは動的に変更させる変数にしたいため{}で囲んで以下のように記入します。
英語:Count {XXX}
日本語:数 {XXX}

3.Localizeコンポーネントに変数を登録する

登録ができたら先ほどのテキストのキー設定をCountに変更します。


このままスクリプトを作成しても動作上問題ないのですが
エディター作業中に以下のエラーが発生します。
こちらはコンポーネントに変数の情報を登録することで解除できるため実施しておきます。



String Reference左の矢印をクリックして展開
→Local Variables「+」ボタン
→String


→変数と値の登録画面が可能となるためそれぞれ入力
今回は下記で入力しました。
Variable Name:XXX
String:0(なんでもよいです)

4.スクリプトで更新する

最後にスクリプトの設定です。
内容は変数XXXへ増加していく数を代入するという内容にしています。
詳細はコード内のコメントをご確認ください。

using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.SmartFormat.PersistentVariables;
using UnityEngine.UI;

public class ChangeText : MonoBehaviour
{
    private int number = 0;
    public Text MainText;

    void Update()
    {
        number++;

        //Localizationの事前に設定したTableからkeyを指定してテキスト内の変数を変更
        //対象のテーブル名:TextTable
        //対象のKey:Count
        //対象のテキスト中の変数:XXX
        LocalizedString textLocalyze = new LocalizedString(tableReference: "TextTable", entryReference: "Count")
        {
            { "XXX", new StringVariable { Value = number.ToString()}},
        };

        //変数更新後の文字列を代入
        MainText.text = textLocalyze.GetLocalizedString();
    }
}


今回は作成したスクリプトをテキストオブジェクトに割り当てます。

確認

実行すると下記で設定していたXXXの部分が動的に変更していることが確認できます。
キー:Count
英語:Count {XXX}
日本語:数 {XXX}

 
※スクショを撮る時間がずれているため数字が異なっています。

変数が更新されないときは

直前の処理が重い処理の場合、値が更新されないことがありました。
そのときは遅延処理で遅らせたところ更新されました。

おわりに

初めてLocalizationに触れる方の参考になれば幸いです。

本を出版しました

marumaro7.hatenablog.com

関連記事

marumaro7.hatenablog.com

marumaro7.hatenablog.com

【Unity】AR Foundation AR Occlusion Manager オクルージョン対応メモ

環境

Unity:2021.3.27f1
AR Foundation:5.1.0

はじめに

現実の物体や人間の存在を検知しAR上の物体を遮蔽する機能であるオクルージョン機能

オクルージョンと一言でいっても種類や実行の条件があったためメモします。

※ARの基本的な設定等は省略します。

オクルージョン設定に必要なコンポーネント

オクルージョン機能を付与するのに必要なのは、
XR Originオブジェクト配下のカメラのオブジェクトに
「AR Occlusion Manager」コンポーネントを追加するだけです。

オクルージョンの種類

オクルージョンは大きく次の2種類
・机や壁などに対するオクルージョン
・人間の手や体に対するオクルージョン

机や壁などに対するオクルージョン

「AR Occlusion Manager」の設定項目でいうところの
Environment Depth Modeが机や壁などに対するオクルージョンの設定

人間の手や体に対するオクルージョン

「AR Occlusion Manager」の設定項目でいうところの
・Human Segmentation Stencil Mode
・Human Segmentation Depth Mode
これらが人間の手や体に対するオクルージョンの設定

Human Segmentation Stencil Modeは、人間の形状に合わせてARオブジェクトを遮蔽する
Human Segmentation Depth Modeは、人間の形状とその深度を検出する

端末側で必要な機能

2種類のオクルージョンに対して必要な端末の機能が異なる。

机や壁などに対するオクルージョン

Android:Depth API
iOS:LiDAR(Light Detection And Ranging)

LiDAR対応端末は以下です。
iPhoneですとiPhone 12 Pro 以降となっており、限定的な印象を受けます。
support.apple.com

人間の手や体に対するオクルージョン

Android:不可(AR Coreが対応していない)
iOS:People Occlusion

People Occlusion対応端末はこちらのサイト様がまとめていただいています。
iPhoneですとiPhone XSから対応ということで対応できるiOSユーザーは多そうです。
www.jyuko49.com

おわりに

オクルージョン対応自体はコンポーネントを追加するだけで簡単ですが、
対応する端末が限定されるため注意が必要なことがわかりました。

ちなみに対応不可端末でそれぞれのオクルージョンをコンポーネント側で有効設定に
しておいても実機でクラッシュするなどは起きませんでした。

ではでは。

私が書いた本

marumaro7.hatenablog.com

【Unity】Xcode 警告 Apple Vision Pro support issue. The app contains the following UIRequiredDeviceCapabilities values, which aren’t supported on Apple Vision Pro. [arkit]

要件

Xcode 14.3.1

現象

ARアプリをXcodeでValidate App または Distribute Appを行うと以下のエラーが発生する。

Apple Vision Pro support issue. The app contains the following UIRequiredDeviceCapabilities values, which aren’t supported on Apple Vision Pro. [arkit]


日本語訳はこちら

Apple Vision Proサポートの問題 このアプリには、Apple Vision Proでサポートされていない以下のUIRequiredDeviceCapabilities値が含まれています。[arkit]

対処法

Apple Vision Proで使用できなくて良いのでApp Store Connect上の下記のチェックを外す。
これで審査が通りました。

→一般
→価格および配信状況
→このアプリをApple Vision Proで配信可能にする

お知らせ

marumaro7.hatenablog.com

【Unity】iOS ATT対応 Unity公式パッケージ 「iOS 14 Advertising Support」を使用して対応する方法

テスト環境

Unity2021.3.27f1
Google Mobile Ads Unity Plugin v8.5.2
iOS 14 Advertising Support 1.0.0
テストOS:iOS16.7

はじめに

これまでATT対応は以下の内容で対応していましたが
Unity公式パッケージ「iOS 14 Advertising Support」を用いることで
簡単に実装できたのでメモしておきます。

marumaro7.hatenablog.com

対応手順

1.インポート

Unityからパッケージマネージャーを開きます。
 ウインドウ→パッケージマネージャー

パッケージマネージャーウインドウからインポート
1.パッケージ:Unity レジストリ
2.検索窓にsupと入力
3.iOS 14 Advertising Support インポート

2.スクリプト作成

ATTPermissionManagerというスクリプトを作成します。(名前は何でも良いです。)

using System.Collections;
using UnityEngine;

#if UNITY_IOS
using Unity.Advertisement.IosSupport;
#endif

public class ATTPermissionManager : MonoBehaviour
{
#if UNITY_IOS
    private IEnumerator Start()
    {
        // 1秒待機(起動直後に表示されない現象への対策)
        yield return new WaitForSeconds(1.0f);

        // 許可ダイアログ表示
        ATTrackingStatusBinding.RequestAuthorizationTracking();
    }
#endif
}

3.空のオブジェクトに割付け

作成した「ATTPermissionManager」のコードを空のオブジェクトに割り付けます。
空のオブジェクトの名前も「ATTPermissionManager」にしました。

4.ビルド

ビルドしてUnity-iPhone.xcodeprojを開いて下さい。

一応ビルド手順
marumaro7.hatenablog.com

5.Xcodeでの設定

Xcodeで以下の設定をします。
1.Info.plistに「Privacy - Tracking Usage Description」を追加
2.「AppTrackingTransparency.framework」を追加

以下の記事の内容となります。

marumaro7.hatenablog.com

動作確認

リクエストウインドウが表示されるはずです。

おわりに

とても簡単に実装でき感動です! Unityさんに感謝!

Unity本を出版しました!

突然ですが、Unity本を出版しました!
こちらを読むことで、スクリプトの基礎固めができます!
現在、kindle unlimitedで読み放題設定中です。今のうちにどうぞ!


もっと早く教えてほしかった!Unity C#入門

アプリ開発 時短講座はこちら

marumaro7.hatenablog.com

参考

docs.unity3d.com

【Unity】Androidビルドエラー java.lang.UnsupportedOperationException: This feature requires ASM7 See the Console for details. 最低APIレベルを24にすることで解決しました。

環境

Unity 2021.3.27f1
Google Mobile Ads Unity Plugin v8.5.1
Target API Level 33

はじめに

Androidでビルドしたところ下記のエラーが発生

java.lang.UnsupportedOperationException: This feature requires ASM7 See the Console for details.

解決した方法

最低APIレベルを24 (Android7.0 'Nougat'(API level 24) )にすることで解決

おわりに

先人の記事に感謝!

参考

teammoko.jp