Blog

制作現場の日常

UnityのEditor拡張でアプリアイコンを差し替えよう

こんにちは、プログラマの棚村です。

Unityでアプリ開発をしているとリリースしたアプリと開発中のアプリを両方とも実機にインストールすることがあると思います。
このときに両方のアプリのアイコンが同じアイコンだと、どちらが開発版なのか見分けがつかなくなるので開発中アプリのアイコンを別のものに変えておき見分けがつくように対策したりします。
このままだとリリースビルドのたびにアイコンを手動で差し替える事となり
この作業を毎回行うのは大変なので、Editor拡張でアイコン差し替えをサポートしようというのが今回のテーマになります。

リリースのたびに赤枠にアイコンを設定することに……

Editor拡張の機能を使うために準備として
Assets以下に「Editor」という名前のフォルダを追加し、その中に.csファイルを追加します。
※「Editor」フォルダに関してhttps://docs.unity3d.com/ja/2020.3/Manual/SpecialFolders.html

まずはメニューからEditor拡張を呼び出せるようにしましょう。

using UnityEditor;
using UnityEngine;

public class IconReplacer : MonoBehaviour
{
    [MenuItem("Tools/Icon/Replace Icon")]
    public static void IconReplace()
    {
        Debug.Log("test");
    }
}
追加したメニュー項目を実行すると、デバッグログが表示されます。

これで呼び出せるようになったので、ここからはアイコン差し替えを実装していきましょう。
差し替えたいアイコンをAssets/Textureフォルダ以下にAppIcon.pngというファイル名で配置し、スクリプトを以下のように修正します。

[MenuItem("Tools/Icon/Replace Icon")]
public static void IconReplace()
{
    // ロード
    var iconPath = $"Assets/Texture/AppIcon.png";
    var iconSizes = PlayerSettings.GetIconSizesForTargetGroup(BuildTargetGroup.iOS, IconKind.Application);
    var tex2Ds = new Texture2D[iconSizes.Length];
    for (var i = 0; i < iconSizes.Length; i++)
    {
        tex2Ds[i] = AssetDatabase.LoadAssetAtPath<Texture2D>(iconPath);
    }

    // セット
    PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.iOS, tex2Ds, IconKind.Application);
}

これでアイコンの差し替えができるようになったので実行してみます。


今回はiOSのアプリアイコンを差し替えるEditor拡張を作成しましたが
BuildTargetGroup, IconKindあたりの設定や使用するメソッドを変更すれば
AndroidのアプリアイコンやiOSのマーケティングアイコンなど色々なアイコンを差し替えることが出来るので活用してみてください。

次の記事へ