20140314 Unity勉強会 PostProcessBuild のおはなし

36
PostProcessBuild のおはなし ~ AssetPostprocessor を添えて ~ 株式会社キッズスター System Development Team Leader 森 哲哉 2014/03/14 第20回 Unity開発技術勉強会

description

2014/03/14 に開催予定の Unity 勉強会用資料です。

Transcript of 20140314 Unity勉強会 PostProcessBuild のおはなし

Page 1: 20140314 Unity勉強会 PostProcessBuild のおはなし

PostProcessBuild のおはなし

~ AssetPostprocessor を添えて ~

株式会社キッズスター System Development Team Leader

森 哲哉

2014/03/14 第20回 Unity開発技術勉強会

Page 2: 20140314 Unity勉強会 PostProcessBuild のおはなし

こんばんは!• “もんりぃ” です!

• Happy Valentine’s White Day !!

• カバンには若干の余裕がございますので、 絶賛チョコレート受付中ですよ~♥

• ………。

Page 3: 20140314 Unity勉強会 PostProcessBuild のおはなし

こんばんは!• ちなみに

• さっきアメリカから帰ってきました!(ドヤァ

• SXSW っていうイベントに参加してきました!

• お土産話聞きたい人は、この後の懇親会で!

• ってことで、今日は PostProcessBuild の話をしに来ました。

Page 4: 20140314 Unity勉強会 PostProcessBuild のおはなし

と、その前に…。

Page 5: 20140314 Unity勉強会 PostProcessBuild のおはなし

$ whoami• “森 哲哉” と申します。

• a.k.a: もんりぃ / T: @monry / F: monry84

• 29歳 / ♂ / O型 / 天秤座 / 既婚

• 趣味は「お酒」と「合唱」です。

Page 6: 20140314 Unity勉強会 PostProcessBuild のおはなし

$ whoami• “株式会社キッズスター” って会社で働いてます。

• 未就学児~小学生のお子さまをお持ちのファミリーをターゲットにした、知育/教育に関わるアプリ・サービスを展開しております。

森のえほん館 なりきり!! ごっこランド

パズル&テイルズおかしのくにを つくるのじゃ!!

なりきり!! アイスクリーム 屋さんごっこ

なりきり!! ママごっこ

お弁当をつくろう!

こえほん

Page 7: 20140314 Unity勉強会 PostProcessBuild のおはなし

れじゅめ• PostProcessBuild 概要

• PostProcessBuild 詳細

• おまけ (AssetPostprocessor について)

Page 8: 20140314 Unity勉強会 PostProcessBuild のおはなし

まえおき• Unity

• version 4.3.2f1

• 4.3.3 は iOS の WWW クラスにバグあり?

• Pro License

• Pro じゃなくても 大丈夫かも?

• Build Platform

• iOS

• Android

• Development Platform

• OS X Marvericks

• Windows 7

• 非サポート機能アリ

Page 9: 20140314 Unity勉強会 PostProcessBuild のおはなし

PostProcessBuild の概要

Page 10: 20140314 Unity勉強会 PostProcessBuild のおはなし

PostProcessBuild 概要• 実機用にビルドする際の割り込み処理

• 大まかに分けて二種類の書き方ができる

• シェルスクリプト

• Unity スクリプト

Page 11: 20140314 Unity勉強会 PostProcessBuild のおはなし

PostProcessBuild 概要• 処理イメージ

Page 12: 20140314 Unity勉強会 PostProcessBuild のおはなし

PostProcessBuild の詳細

Page 13: 20140314 Unity勉強会 PostProcessBuild のおはなし

利用用途• ビルド後に手動でイヂイヂする必要のある処理を自動化

• 表示アプリ名の設定

• iOS: (ja|en).lproj/Infoplist.strings

• Android: res/values(-ja)?/strings.xml

• URL Schemes の設定

Page 14: 20140314 Unity勉強会 PostProcessBuild のおはなし

利用用途• ARC を使っている NativePlugin に -fobjc-arc を付与

• AndroidManfiest.xml の加工

• advertisingIdentifier (IDFA) 問題への対応

• Unity の次バージョンアップデートで直るらしいけど。 最新版では直ってます。

• 何れにしても、xcodeproj とか AndroidManifest について、ある程度知識を要する

Page 15: 20140314 Unity勉強会 PostProcessBuild のおはなし

シェルスクリプトの場合• 先ずは Unity Manual 読みましょう

• 大前提として、Mac 版のみサポート

• Assets/Editor/PostprocessBuildPlayer

• 拡張子無し

• 実行権限付与

Page 16: 20140314 Unity勉強会 PostProcessBuild のおはなし

シェルスクリプトの場合• shebang 的にパスが通ってれば言語は不問

• xcodeproj とかを弄るのであればRuby がオヌヌメかな?

• xcodeproj っていう RubyGems が便利

• xcodeproj とか AndroidManifest とかの仕組みをある程度熟知していないとハマる

Page 17: 20140314 Unity勉強会 PostProcessBuild のおはなし

シェルスクリプトの場合• 実行時の引数

1. 出力先のフルパス

2. Build Platform 種別

• iOS: “iPhone”

• Android: “android”

3. 最適化種別 (Stripping Level?)

4. 会社名

5. プロダクト名

6. 画面横幅

7. 画面縦幅

Page 18: 20140314 Unity勉強会 PostProcessBuild のおはなし

シェルスクリプトの場合• 注意点

• 「そう、Mac ならね。」

• 後述の [PostProcessBuild(N)] 属性よりも先に実行される

• まぁ、ソレ自体は問題じゃ無いんだが、RubyGems の xcodeproj と、後述の Xcode Editor for Unity を併用するとハマる

• ってのも、Xcode Editor for Unity は ASCII Format plist しか読み書きできないのだが、RubyGems の xcodeproj は XML Format plist として書き出してしまうので、[PostProcessBuild(N)] 側でエラーをぶっこいてくれる

• Facebook SDK for Unity を使う場合、[PostProcessBuild(N)] の処理内で Xcode Editor for Unity を用いているので、確実に上記の問題にブチ当たる

Page 19: 20140314 Unity勉強会 PostProcessBuild のおはなし

Unity スクリプトの場合• 先ずは Unity Manual 読みましょう

• Unity 3.5 から利用可能になった (らしい)

• Mac / Windows どちらでも

• Assets/**/Editor/*.(cs|js)

• Unity 的に Editor Script であると認識出来るパスなら OK ってコト

Page 20: 20140314 Unity勉強会 PostProcessBuild のおはなし

Unity スクリプトの場合• .NET に出来るコトなら何でもござれ

• もちろん Unity としての機能も使えるので、Resources.Load() とかも使えたりする

• ポイントは二つ

• Editor ディレクトリ以下に配置する

• public static なメソッドに [PostProcessBuild(N)] を属性設定する (N: 実行順序)

Page 21: 20140314 Unity勉強会 PostProcessBuild のおはなし

Unity スクリプトの場合• こんな感じ。

public static class PostProcessBuild {! [PostProcessBuild(100)] public static void OnPostProcessBuild(BuildTarget target, string path) { if (target == BuildTarget.iPhone) { Debug.Log("iOS: " + path); } if (target == BuildTarget.Android) { // 普通に Build した場合は apk の状態で渡されるので、制御する if (!Regex.IsMatch(path, "\\.apk$")) { Debug.Log("Android: " + path); } } }!}

Page 22: 20140314 Unity勉強会 PostProcessBuild のおはなし

Unity スクリプトの場合• xcodeproj を弄る場合は Xcode Editor for Unity を使うと便利!

• 作者の Daniele Cariola さん に感謝!

• Xcode 5 でも問題無く動作するコトを確認済

• AndroidManifest 弄るライブラリとかは見付からなかったけど、普通に XML 弄れば OK

Page 23: 20140314 Unity勉強会 PostProcessBuild のおはなし

Unity スクリプトの場合• 注意点

• Android の場合、Google Android Project として Export しないと .apk に対して処理するコトになっちゃうからアウト

• シェルスクリプトと違って、実行時にエラーこいた場合はビルド自体が止まる

Page 24: 20140314 Unity勉強会 PostProcessBuild のおはなし

メリット/デメリット シェルスクリプト

• メリット

• 慣れた言語で書ける

• 実装時の確認が楽

• 引数捏造してキックすればOK

• 言語に依ってはライブラリが豊富

• デメリット

• Unity の機能が使えない

• ログ出し辛い

• エラーが起きてても気付きにくい

• Windows…(́・ω・`)

Page 25: 20140314 Unity勉強会 PostProcessBuild のおはなし

メリット/デメリット Unity スクリプト

• メリット

• Unity の機能使える

• 窓でも動く

• 頑張ればプロジェクト依存な値を分離できる

• ScriptableObject とか使えばね。

• デメリット

• エラー起きると止まる

• 確認がメンドい

• 毎回ビルドしないとだめぽ

Page 26: 20140314 Unity勉強会 PostProcessBuild のおはなし

まとめ• 個人的には Unity スクリプトがオススメです

• 処理順を定義出来るから細分化できるし

• 弊社的には、これのお陰でビルド後に手動で設定するコトは殆どありません

• Provisioning Profile の設定は Trampoline 弄ってます。

• Deploy Gate 使ってテスト配信している場合は、それすら不要?

• 相当本気出せば Jenkins おじさんと仲良くするなどで、 “ビルド” → “APK/IPA アーカイブ” → “Deploy Gate へ Upload” とかを完全自動化できるかも

Page 27: 20140314 Unity勉強会 PostProcessBuild のおはなし

One more thing…

Page 28: 20140314 Unity勉強会 PostProcessBuild のおはなし

AssetPostprocessor• PostProcess 系のネタとして One more thing.

• モバイル向けにビルドするに当たって、テクスチャの圧縮形式については注意を払う必要があります

• もんりぃのオススメは以下の通り

• iOS: RGBA Compressed PVRTC 4bits (Normal)

• Android: RGBA Compressed ATC 8bits (Fast)

• 詳しくは こちら のスライドをご参照ください (ステマ)

Page 29: 20140314 Unity勉強会 PostProcessBuild のおはなし

AssetPostprocessor• で、「この設定を毎回やるの (‘A`)マンドクセ」な貴方に朗報です!

• なんと、各種 Asset を Import するときにも処理をフックできちゃうのです!

• Texture だけに限らず、Audio やら Model やらの “Asset” なモノであれば何でもござれ

Page 30: 20140314 Unity勉強会 PostProcessBuild のおはなし

AssetPostprocessor• 先ずは Unity Manual を…(ry

• ポイントは以下の通り

• Editor/ ディレクトリ以下に配置

• UnityEditor.AssetPostprocessor を継承

• On(Pre|Post)process(Audio|Model|Texture) メソッドを実装 (他にも幾つかあるけどね)

• Messaging の機能により呼び出される

Page 31: 20140314 Unity勉強会 PostProcessBuild のおはなし

AssetPostprocessor• 弊社では以下のようなコトをやってます

• 基本的には Import Settings を上書き

• 拡張子が .raw.png なファイルは素通り

• プラットフォーム別設定を個別に指定したいケースを想定して、既に Overwrite for にチェックが付いている場合は、上書きしない

Page 32: 20140314 Unity勉強会 PostProcessBuild のおはなし

まとめ• Unity には (Pre|Post)HogeFuga なフック処理が盛りだくさん!

• Editor Script を使いこなすと開発効率めっちゃあがるよ!!

• Unity Manual 熟読して、存分に使い倒しちゃいましょう!!!

Page 33: 20140314 Unity勉強会 PostProcessBuild のおはなし

視聴者プレゼント

Page 34: 20140314 Unity勉強会 PostProcessBuild のおはなし

ココまでお付き合い頂いた貴方へ贈るささやかなプレゼント• てことで、弊社で使っている AssetPostprocessor (を一部加工したモノ) を こちら に置いておきました

• よしなに加工して使ってくださいな

• あ、ノークレーム・ノーリターンでオナシャス!!

Page 35: 20140314 Unity勉強会 PostProcessBuild のおはなし

Thank you!!

Page 36: 20140314 Unity勉強会 PostProcessBuild のおはなし

Any Questions?