20140314 Unity勉強会 PostProcessBuild のおはなし

7,621 views

Published on

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

Published in: Technology
0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,621
On SlideShare
0
From Embeds
0
Number of Embeds
127
Actions
Shares
0
Downloads
15
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide

20140314 Unity勉強会 PostProcessBuild のおはなし

  1. 1. PostProcessBuild のおはなし ∼ AssetPostprocessor を添えて ∼ 株式会社キッズスター System Development Team Leader 森 哲哉 2014/03/14 第20回 Unity開発技術勉強会
  2. 2. こんばんは! • もんりぃ です! • Happy Valentine s White Day !! • カバンには若干の余裕がございますので、
 絶賛チョコレート受付中ですよ∼♥ • ………。
  3. 3. こんばんは! • ちなみに • さっきアメリカから帰ってきました!(ドヤァ • SXSW っていうイベントに参加してきました! • お土産話聞きたい人は、この後の懇親会で! • ってことで、今日は PostProcessBuild の話をし に来ました。
  4. 4. と、その前に…。
  5. 5. $ whoami • 森 哲哉 と申します。 • a.k.a: もんりぃ / T: @monry / F: monry84 • 29歳 / ♂ / O型 / 天 座 / 既婚 • 趣味は「お酒」と「合唱」です。
  6. 6. $ whoami • 株式会社キッズスター って会社で働いてます。 • 未就学児∼小学生のお子さまをお持ちの
 ファミリーをターゲットにした、知育/教育に
 関わるアプリ・サービスを展開しております。 森のえほん館 なりきり!! ごっこランド パズル&テイルズ
 おかしのくにを つくるのじゃ!! なりきり!! アイスクリーム 屋さんごっこ なりきり!! ママごっこ お弁当をつくろう! こえほん
  7. 7. れじゅめ • PostProcessBuild 概要 • PostProcessBuild 詳細 • おまけ (AssetPostprocessor について)
  8. 8. まえおき • Unity • version 4.3.2f1 • 4.3.3 は iOS の WWW クラスにバグあり? • Pro License • Pro じゃなくても
 大丈夫かも?
 • Build Platform • iOS • Android • Development Platform • OS X Marvericks • Windows 7 • 非サポート機能アリ
  9. 9. PostProcessBuild の概要
  10. 10. PostProcessBuild 概要 • 実機用にビルドする際の
 割り込み処理 • 大まかに分けて二種類の
 書き方ができる • シェルスクリプト • Unity スクリプト
  11. 11. PostProcessBuild 概要 • 処理イメージ
  12. 12. PostProcessBuild の詳細
  13. 13. 利用用途 • ビルド後に手動でイヂイヂする必要のある処理を 自動化 • 表示アプリ名の設定 • iOS: (ja¦en).lproj/Infoplist.strings • Android: res/values(-ja)?/strings.xml • URL Schemes の設定
  14. 14. 利用用途 • ARC を使っている NativePlugin に -fobjc-arc を付与 • AndroidManfiest.xml の加工 • advertisingIdentifier (IDFA) 問題への対応 • Unity の次バージョンアップデートで
 直るらしいけど。 最新版では直ってます。 • 何れにしても、xcodeproj とか AndroidManifest に
 ついて、ある程度知識を要する
  15. 15. シェルスクリプトの場合 • 先ずは Unity Manual 読みましょう • 大前提として、Mac 版のみサポート • Assets/Editor/PostprocessBuildPlayer • 拡張子無し • 実行権限付与
  16. 16. シェルスクリプトの場合 • shebang 的にパスが通ってれば言語は不問 • xcodeproj とかを弄るのであれば
 Ruby がオヌヌメかな? • xcodeproj っていう RubyGems が便利 • xcodeproj とか AndroidManifest とかの
 仕組みをある程度熟知していないとハマる
  17. 17. シェルスクリプトの場合 • 実行時の引数 1. 出力先のフルパス 2. Build Platform 種別 • iOS: iPhone • Android: android 3. 最適化種別 (Stripping Level?) 4. 会社名 5. プロダクト名 6. 画面横幅 7. 画面縦幅
  18. 18. シェルスクリプトの場合 • 注意点 • 「そう、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 を用いているので、確実に上記の問題にブチ当たる
  19. 19. Unity スクリプトの場合 • 先ずは Unity Manual 読みましょう • Unity 3.5 から利用可能になった (らしい) • Mac / Windows どちらでも • Assets/**/Editor/*.(cs¦js) • Unity 的に Editor Script であると認識出来る パスなら OK ってコト
  20. 20. Unity スクリプトの場合 • .NET に出来るコトなら何でもござれ • もちろん Unity としての機能も使えるので、
 Resources.Load() とかも使えたりする • ポイントは二つ • Editor ディレクトリ以下に配置する • public static なメソッドに [PostProcessBuild(N)] を属性設定する (N: 実行順序)
  21. 21. 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);
 }
 }
 }
 ! }
  22. 22. Unity スクリプトの場合 • xcodeproj を弄る場合は Xcode Editor for Unity を使うと便利! • 作者の Daniele Cariola さん に感謝! • Xcode 5 でも問題無く動作するコトを確認済 • AndroidManifest 弄るライブラリとかは見付か らなかったけど、普通に XML 弄れば OK
  23. 23. Unity スクリプトの場合 • 注意点 • Android の場合、Google Android Project として Export しないと .apk に対して処理す るコトになっちゃうからアウト • シェルスクリプトと違って、実行時に
 エラーこいた場合はビルド自体が止まる
  24. 24. メリット/デメリット シェルスクリプト • メリット • 慣れた言語で書ける • 実装時の確認が楽 • 引数捏造してキック すればOK • 言語に依ってはライブ ラリが豊富
 • デメリット • Unity の機能が使えな い • ログ出し辛い • エラーが起きてても気 付きにくい • Windows…(́・ω・`)
  25. 25. メリット/デメリット Unity スクリプト • メリット • Unity の機能使える • 窓でも動く • 頑張ればプロジェクト 依存な値を分離できる • ScriptableObject とか使えばね。
 • デメリット • エラー起きると止まる • 確認がメンドい • 毎回ビルドしないと だめぽ
  26. 26. まとめ • 個人的には Unity スクリプトがオススメです • 処理順を定義出来るから細分化できるし • 弊社的には、これのお陰でビルド後に手動で設定するコトは殆どあり ません • Provisioning Profile の設定は Trampoline 弄ってます。 • Deploy Gate 使ってテスト配信している場合は、それすら不要? • 相当本気出せば Jenkins おじさんと仲良くするなどで、
 ビルド → APK/IPA アーカイブ → Deploy Gate へ Upload 
 とかを完全自動化できるかも
  27. 27. One more thing…
  28. 28. AssetPostprocessor • PostProcess 系のネタとして One more thing. • モバイル向けにビルドするに当たって、テクスチャの圧縮形 式については注意を払う必要があります • もんりぃのオススメは以下の通り • iOS: RGBA Compressed PVRTC 4bits (Normal) • Android: RGBA Compressed ATC 8bits (Fast) • 詳しくは こちら のスライドをご参照ください (ステマ)
  29. 29. AssetPostprocessor • で、「この設定を毎回やるの ( A`)マンドクセ」な貴 方に朗報です! • なんと、各種 Asset を Import するときにも処 理をフックできちゃうのです! • Texture だけに限らず、Audio やら Model やら の Asset なモノであれば何でもござれ
  30. 30. AssetPostprocessor • 先ずは Unity Manual を…(ry • ポイントは以下の通り • Editor/ ディレクトリ以下に配置 • UnityEditor.AssetPostprocessor を継承 • On(Pre¦Post)process(Audio¦Model¦Texture) メソッド を実装 (他にも幾つかあるけどね) • Messaging の機能により呼び出される
  31. 31. AssetPostprocessor • 弊社では以下のようなコトをやってます • 基本的には Import Settings を上書き • 拡張子が .raw.png なファイルは素通り • プラットフォーム別設定を個別に指定したいケー スを想定して、既に Overwrite for にチェッ クが付いている場合は、上書きしない
  32. 32. まとめ • Unity には (Pre¦Post)HogeFuga なフック処理 が盛りだくさん! • Editor Script を使いこなすと開発効率めっちゃ あがるよ!! • Unity Manual 熟読して、存分に使い倒しちゃい ましょう!!!
  33. 33. 視聴者プレゼント
  34. 34. ココまでお付き合い頂いた
 貴方へ贈るささやかなプレゼント • てことで、弊社で使っている AssetPostprocessor (を一部加工したモノ) を こちら に置いておきました • よしなに加工して使ってくださいな • あ、ノークレーム・ノーリターンでオナシャス!!
  35. 35. Thank you!!
  36. 36. Any Questions?

×