Negipoyoc

はじめに

伊藤さんのUnity Icon Customizerを改造してみました。

iOS向けに作られていたので、PC向けに。そしてEditorWindowではなくビルド時に自動で生成してしまうようにした。というのが主な改造ポイントです。

Githubリンク

https://github.com/negipoyoc/UnityAutoIconBuilder

こちらに .unitypackageをアップしました。

特に見落としがなければ.unitypackageを導入するだけで自動でアプリアイコンが生成されるようになります。使用法などはGithubを参照してください。

伊藤さんのIcon-Customizerを見る。

UnityIconCustomizer はどういう動作をするのか見ていきます。

といっても、1つのクラスだけでできてるので、そんなに量はないのですけれど。(簡単で嬉しい)

Editor拡張のスクリプトを見る

IconBuilder.csを見てみましょう。

処理を見てみると

  • カメラやCanvasが入ったPrefabを生成
  • アプリのバージョン情報(string値)を取得
  • Prefabの中のカメラからCanvasに写った画像をRenderTextureでTexture2D化
  • PNGでキャプチャした画像ファイルを出力
  • PlayerSettingsのアイコン設定部分に出力した画像を設定する
  • Prefabを消す

ということをしています。

もっと簡単に言えば、 「撮影用のカメラとCanvasを一瞬生成し、撮影した画像をアプリアイコンに設定してる」 ということになります。

改造していく

これをやっていきます。

2点の改造ポイントがあります。

  • PC向けに出力サイズを変更と設定先の変更
  • ビルド時に自動生成する

PC向けに出力サイズを変更

伊藤さんのものは、iOS向けということで2のべき乗サイズの画像で良いものでした。

一方PCのConfigration Dialog用の画像は「432*163」というサイズを要求されます。参考
(なんでこんな中途半端なサイズを要求されるんだろう。)

今回自分は上の画像のように設定しました。

RenderTextureのサイズを432*163にし、それに合わせてCanvasを作ったのが重要なポイントです。
(これを各Platformに合わせてサイズを変えることでいろんなPlatformに合わせた自動化ができると思います)


PC向けビルドでは生成したTextureのConfigダイアログへの設定方法ですが、

        PlayerSettings.resolutionDialogBanner = originalIcon;

という感じで設定すればOKです。

ビルド時に自動生成する

IPreprocessBuildWithReport.OnPreprocessBuild という、ビルド前にフックするメソッドがあるのでこれを利用します。

といっても、今までMenuItemで呼ばれてたStaticメソッドを呼ぶようにするだけなので、別に大したことはしません。

    public void OnPreprocessBuild(BuildReport report)
    {
        GenerateConfigrationImage();
    }

    public static void GenerateConfigrationImage()
    {
      //...アイコンを生成する処理
    }

こんな感じ。

気をつけること

出力画像のImport設定を「Non Power of 2」にする。

先程も言いましたが、PCのConfig画面でのサイズは「432*163」です。

そして、以下のように設定しておかないと勝手に「512*128」なんかに書き換わってうまくいきません。