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