Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
ここが変わる!Unity 5のスマホ開発
 ∼アセットバンドル、ビルド、プラグイン
∼
ユニティ・テクノロジーズ・ジャパン
エバンジェリスト
伊藤周
COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundle
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
今までのAssetBundle問題点
•ビルドスクリプトが複雑
•ビルドに時間がかかる
•アセットの依存関係が面倒
•互換性
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
解決方針
• シンプルな感じに
• Simple UI
• Simple script 
• 追加ビルド可能に
• 依存性はUnityが解決
• Manifest file...
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
変更点
•新しいAssetBundleビルド方式
•新しいAssetロード方式
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
新しいAssetBundleビルド
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
まずは
ざっくり
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
新しいAssetBundleビルド
Step1 Asset と AssetBundle 間を結びつける
Step2 ビルドするスクリプトを呼ぶ
以上!
public sta...
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
ちょっと
深く掘り下げ
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundle名前付け
• 小文字のみ
• 同名禁止
• パス構成
• Editor拡張で一気に「名前」=「パス」と変更も可能
public class Csuto...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Buildスクリプト
• 出力パス
• BuildAssetBundleOptions
• 出力ターゲット
public static void BuildAssetBun...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
BuildAssetBundleOptions
• IngoreTypeTreeChanges(New!)  
タイプツリーが変わっても無視
=ソースコード変更しても変化し...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
バージョン互換性について
AssetBundle
(Unity5.1)
AssetBundle
(Unity5.2)
AssetBundle
(Unity4.6)
⭕️❌
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
バージョン互換性について
• タイプツリーを持っているのであればバージョンア
ップしても古いAssetBundleは使用可
• 要Unity5
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
依存関係
•Push/Pop いらない
•勝手に依存関係を調べて
くれる
•「依存関係があるアセッ
ト群を全てビルド」が必
要なくなる
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Manifestファイルについて
• Single Manifestファイル
(ビルド時のフォルダ名が
AB名になる)
• 他の.manifestファイル
→親玉。依存関係...
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
.manifest ファイル
Asset
Bundle
“B”Asset
Bundle
“A”
A.manifest
• CRC
• アセット名
• 依存関係
• Hash...
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Single Manifestファイル
Single Manifest
C.manifest
A.manifest
B.manifest
D.manifest
•全Asse...
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Variantとは
• HDとSDを同じアセットとして扱える仕組
み
• 例: ロースペックなスマホではSD、ハイ
スペックならHDで表示
• エディタ右下で設定
• 設定...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
新しいAssetロード方式
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
まずは
ざっくり
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
サンプルプロジェクトを使おう
• サンプルプロジェクトをDL
• http://files.unity3d.com/vincent/assetbundle-demo/use...
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
ちょっと
深く掘り下げ
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
• AssetBundle取り扱いクラスのサンプル
• 機能
1.ABの基本的なロードの仕組み
2.依存関係の解消
3.エディタ...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 1. 基本ロードの仕組み
LoadAssetAsync request.GetAsset
AssetBundleManager...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 1. 基本ロードの仕組み
1.アプリ側からLoadAssetAsyncを呼び出される
2.LoadAssetBundleInt...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 2. 依存関係の解消
AssetBundleManager.cs
LoadAssetBundle
AssetBundleMan...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 2. 依存関係の解消
1. m_AssetBundleManifest.GetAllDependencies(abName) ...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 3. エディタシミュレーション
LoadAssetAsync request.GetAsset
AssetBundleMana...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 3. エディタシミュレーション
1. エディタ上で可否をトグル
2. Initialize,LoadAssetBundle,U...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 4. Variantsを使った切り替え
AssetBundleManager.cs
LoadAssetBundle
Remap...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
AssetBundleManager.cs
 4. Variantsを使った切り替え
1.m_AssetBundleManifest.GetAllAssetBundlesW...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
デモ
• https://github.com/makoto-unity/NewAssetBundleSample/
• ジュエルセイバーFREE
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
ビルドHack
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
ところで
AssetBundleビルド
時間かかりません?
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
そんな
あなたのための
いいHack
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Projectの
コピー4
Projectの
コピー3
Project
マルチプロセスビルドHack
• 何個もビルドプロセスを走ら
せて、並行でビルド
• 複数のプロジェ...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
マルチプロセスビルドHack
• プロジェクトファイルを複数作成
• シンボリックリンク
• Library, ProjectSettings フォルダをリンク
• Ass...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
マルチプロセスビルドHack
• Unityはバッチモードを使う
• Unity -quit -batchmode -projectPath [path]
-execute...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
マルチプロセスビルドHack
rm -rf $2
mkdir $2
cd $2
ln -s ../$1/AssetBundles .
ln -s ../$1/Library...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
マルチプロセスビルドHack
public static void BuildAssetBundlesBatch()
{
// Choose the output path...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
マルチプロセスビルドHack
• 結果!
• x1 16:16
• x2 8:12
• x4 5:03
• x5 4:43
• x8 3:26
(MacBookPro Re...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
マルチプロセスビルドHack
• 注意点
• 未来永劫使えるとも限らない!
• そもそもUnityのAssetBundleビルドがマルチスレッド
化すればいいのでは…
• ...
COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2015 @ UNITY TECHNOLOGIES
ビルド
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
ビルドの変更点
• IL2CPP
• 64bit対応のため
• ビルドサイズ問題は?
→まさに今、対応中
• Use IL2CPP precompiled header
•...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
UnityEditor.iOS.Xcode
• 待望のXcodeプロジェクトを直接編集可能に!
• frameworkの追加/コンパイルオプションの追加/lib,heade...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
UnityEditor.iOS.Xcode
[PostProcessBuild]
public static void OnPostprocessBuild(BuildTa...
COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2015 @ UNITY TECHNOLOGIES
Plug-in
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Plug-in の変更点
• Plugins フォルダ以外でも追加可能
• それぞれを個別で選択可能
• 重複も可能()
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Plug-in の変更点
• 依存するFrameworkを選択可
• コンパイルオプションを設定可
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Plug-in の変更点
• 「全部再設定しなくちゃいけないの?」
→インポート時に Plugins/iOS/ に置けば自動的に認識
• 「画像とかPluginとして認識さ...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Native Code Plug-in (復習)
[DllImport("__Internal")]
private static extern void callNati...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Native Code Plug-in (直接呼出し型)
• ObjC.cs
public class ObjC
{
[DllImport("__Internal")]
p...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Native Code Plug-in (直接呼出し型)
IntPtr instance;
IntPtr classInfo;
void Start() {
classIn...
COPYRIGHT 2015 @ UNITY TECHNOLOGIES
Native Code Plug-in (直接呼出し型)
• 利点
• C → ObjCの橋渡し部分のコードを書かなくても良い
• Singletonを使わない
• 注意点...
Upcoming SlideShare
Loading in …5
×

ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~

19,638 views

Published on

Unity 5はiOS/Android開発がスムーズになるフィーチャーが盛りだくさんです。再設計されて使いやすくなったアセットバンドルを中心に、XcodeでFrameworkが追加が容易になったビルドや、ネイティブ側とのやり取りが簡単に記述できるプラグインなどを紹介していきます

Published in: Technology
  • Sex in your area is here: ❶❶❶ http://bit.ly/39sFWPG ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/39sFWPG ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~

  1. 1. COPYRIGHT 2015 @ UNITY TECHNOLOGIES ここが変わる!Unity 5のスマホ開発  ∼アセットバンドル、ビルド、プラグイン ∼ ユニティ・テクノロジーズ・ジャパン エバンジェリスト 伊藤周
  2. 2. COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundle
  3. 3. COPYRIGHT 2014 @ UNITY TECHNOLOGIES 今までのAssetBundle問題点 •ビルドスクリプトが複雑 •ビルドに時間がかかる •アセットの依存関係が面倒 •互換性
  4. 4. COPYRIGHT 2014 @ UNITY TECHNOLOGIES 解決方針 • シンプルな感じに • Simple UI • Simple script  • 追加ビルド可能に • 依存性はUnityが解決 • Manifest file • バージョン間の互換性 • 新旧混ぜるな危険
  5. 5. COPYRIGHT 2014 @ UNITY TECHNOLOGIES 変更点 •新しいAssetBundleビルド方式 •新しいAssetロード方式
  6. 6. COPYRIGHT 2015 @ UNITY TECHNOLOGIES 新しいAssetBundleビルド
  7. 7. COPYRIGHT 2014 @ UNITY TECHNOLOGIES まずは ざっくり
  8. 8. COPYRIGHT 2015 @ UNITY TECHNOLOGIES 新しいAssetBundleビルド Step1 Asset と AssetBundle 間を結びつける Step2 ビルドするスクリプトを呼ぶ 以上! public static void BuildAssetBundles(){ BuildPipeline.BuildAssetBundles(); }
  9. 9. COPYRIGHT 2014 @ UNITY TECHNOLOGIES ちょっと 深く掘り下げ
  10. 10. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundle名前付け • 小文字のみ • 同名禁止 • パス構成 • Editor拡張で一気に「名前」=「パス」と変更も可能 public class CsutomImporter : AssetPostprocessor { void OnPostprocessTexture(Texture2D texture) { assetImporter.assetBundleName = assetPath; } }
  11. 11. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Buildスクリプト • 出力パス • BuildAssetBundleOptions • 出力ターゲット public static void BuildAssetBundles() { BuildPipeline.BuildAssetBundles( outputPath, BuildAssetBundleOptions.IgnoreTypeTreeChanges, EditorUserBuildSettings.activeBuildTarget); }
  12. 12. COPYRIGHT 2015 @ UNITY TECHNOLOGIES BuildAssetBundleOptions • IngoreTypeTreeChanges(New!)   タイプツリーが変わっても無視 =ソースコード変更しても変化したとみなされない • DisableWriteTypeTree タイプツリー自体を削除(サイズ削減用途として) (こちらをオンにしてIngoreTypeTreeChangesをオンはできない) • CollectDependencies →いつでもON • DeterministicAssetBundle  →いつでもON • CompleteAssets →廃止。いつでもコンプリート • ForceRebuildAssetBundle(New!) →強制的にリビルド • AppendHashToAssetBundleName(New!)  →ハッシュを追加
  13. 13. COPYRIGHT 2015 @ UNITY TECHNOLOGIES バージョン互換性について AssetBundle (Unity5.1) AssetBundle (Unity5.2) AssetBundle (Unity4.6) ⭕️❌
  14. 14. COPYRIGHT 2015 @ UNITY TECHNOLOGIES バージョン互換性について • タイプツリーを持っているのであればバージョンア ップしても古いAssetBundleは使用可 • 要Unity5
  15. 15. COPYRIGHT 2014 @ UNITY TECHNOLOGIES 依存関係 •Push/Pop いらない •勝手に依存関係を調べて くれる •「依存関係があるアセッ ト群を全てビルド」が必 要なくなる
  16. 16. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Manifestファイルについて • Single Manifestファイル (ビルド時のフォルダ名が AB名になる) • 他の.manifestファイル →親玉。依存関係を解決できる。  ランタイムに読んで使用 →インクリメンタルビルドにだけ  関係する。  ランタイム時は読み込まない
  17. 17. COPYRIGHT 2014 @ UNITY TECHNOLOGIES .manifest ファイル Asset Bundle “B”Asset Bundle “A” A.manifest • CRC • アセット名 • 依存関係 • Hash • ClassTypes B.manifest Asset Bundle “C” C.manifest
  18. 18. COPYRIGHT 2014 @ UNITY TECHNOLOGIES Single Manifestファイル Single Manifest C.manifest A.manifest B.manifest D.manifest •全AssetBundle名 •Assetの依存関係
  19. 19. COPYRIGHT 2014 @ UNITY TECHNOLOGIES Variantとは • HDとSDを同じアセットとして扱える仕組 み • 例: ロースペックなスマホではSD、ハイ スペックならHDで表示 • エディタ右下で設定 • 設定しているアセットと設定していないア セットを混ぜてはいけない • 違うABで同じVariantも設定可 SD HD ★を出して SD モード
  20. 20. COPYRIGHT 2015 @ UNITY TECHNOLOGIES 新しいAssetロード方式
  21. 21. COPYRIGHT 2014 @ UNITY TECHNOLOGIES まずは ざっくり
  22. 22. COPYRIGHT 2014 @ UNITY TECHNOLOGIES サンプルプロジェクトを使おう • サンプルプロジェクトをDL • http://files.unity3d.com/vincent/assetbundle-demo/users_assetbundle-demo.zip • サンプルシーン • AssetLoader(Assetロードのサンプル) • SceneLoader(シーンロードのサンプル) • VariantLoader(Variantのサンプル) • スクリプト • AssetBundleManager.cs (マネージャークラス) • BaseLoader.cs (基本ローダー)
  23. 23. COPYRIGHT 2014 @ UNITY TECHNOLOGIES ちょっと 深く掘り下げ
  24. 24. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs • AssetBundle取り扱いクラスのサンプル • 機能 1.ABの基本的なロードの仕組み 2.依存関係の解消 3.エディタシミュレーション 4.Variantsを使った切り替え
  25. 25. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  1. 基本ロードの仕組み LoadAssetAsync request.GetAsset AssetBundleManager.cs Baseloader.cs キュー キュー キュー request Done! LoadAssetBundle WWW発行 キュー AB名
  26. 26. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  1. 基本ロードの仕組み 1.アプリ側からLoadAssetAsyncを呼び出される 2.LoadAssetBundleInternalで WWW.LoadFromCacheOrDownloadを発行して m_DownloadingWWWsにキューを突っ込む 3.Updateでキューを回して、終わったらDispose 4.依存関係のロードも
  27. 27. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  2. 依存関係の解消 AssetBundleManager.cs LoadAssetBundle AssetBundleManifest AB名 この ABに依存する、全て のABをくれ 依存AssetBundle1 依存AssetBundle2 依存AssetBundle3 Done! Done! Done! ロード ロード ロード
  28. 28. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  2. 依存関係の解消 1. m_AssetBundleManifest.GetAllDependencies(abName) で依 存しているAB名を取得 2. 1で取得したABをLoadAssetBundleInternalでロード
  29. 29. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  3. エディタシミュレーション LoadAssetAsync request.GetAsset AssetBundleManager.cs Baseloader.cs request AB名 AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName
  30. 30. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  3. エディタシミュレーション 1. エディタ上で可否をトグル 2. Initialize,LoadAssetBundle,UnloadAssetBundleを何もしないで 返す 3. LoadAssetAsyncでは AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName でアセットパスを取得して、そこからアセットを取り出す 4. いかにもロードしているかのように返す
  31. 31. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  4. Variantsを使った切り替え AssetBundleManager.cs LoadAssetBundle RemapVariantName StarObj.sdStarObj.hd SD AssetBundleManifest 設定 していたVariant を付加 Kamen.sd Yaranai.sd StarObj.sd Kamen.hd Yaranai.hd StarObj.hd 一致する 名前を検索
  32. 32. COPYRIGHT 2015 @ UNITY TECHNOLOGIES AssetBundleManager.cs  4. Variantsを使った切り替え 1.m_AssetBundleManifest.GetAllAssetBundlesWithVariant で 全Variant付きABを取得 2. 1から該当のアセットバンドル名を検索 3. 最後のvariant文字列(.hd/.sd)を差し替えてアセットバンド ル名を返す
  33. 33. COPYRIGHT 2015 @ UNITY TECHNOLOGIES デモ • https://github.com/makoto-unity/NewAssetBundleSample/ • ジュエルセイバーFREE
  34. 34. COPYRIGHT 2015 @ UNITY TECHNOLOGIES ビルドHack
  35. 35. COPYRIGHT 2014 @ UNITY TECHNOLOGIES ところで AssetBundleビルド 時間かかりません?
  36. 36. COPYRIGHT 2014 @ UNITY TECHNOLOGIES そんな あなたのための いいHack
  37. 37. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Projectの コピー4 Projectの コピー3 Project マルチプロセスビルドHack • 何個もビルドプロセスを走ら せて、並行でビルド • 複数のプロジェクトを用意 • プロセスごとに別のプロジェ クトを使う • 最終成果物(AssetBundle)だ けを集積 Projectの コピー2 Projectの コピー1 全AssetBundle AB1 AB2 AB3 AB4
  38. 38. COPYRIGHT 2015 @ UNITY TECHNOLOGIES マルチプロセスビルドHack • プロジェクトファイルを複数作成 • シンボリックリンク • Library, ProjectSettings フォルダをリンク • Assets はその中にあるフォルダとファイルをリンク • Tempはリンクしない
  39. 39. COPYRIGHT 2015 @ UNITY TECHNOLOGIES マルチプロセスビルドHack • Unityはバッチモードを使う • Unity -quit -batchmode -projectPath [path] -executeMethod BuildScript.BuildAssetBundlesBatch • ビルドするAssetBundleは分担を分ける • 例:100個あるABのうち、1~25はプロセス1、26∼50 はプロセス2…
  40. 40. COPYRIGHT 2015 @ UNITY TECHNOLOGIES マルチプロセスビルドHack rm -rf $2 mkdir $2 cd $2 ln -s ../$1/AssetBundles . ln -s ../$1/Library . ln -s ../$1/ProjectSettings . mkdir Assets cd Assets ln -s ../../$1/Assets/* . /Applications/Unity5_Latest/Unity.app/Contents/MacOS/Unity -quit -batchmode - projectPath /Users/makoto/Unity/GitHub/$2 -logFile /Users/makoto/Unity/ GitHub/tmp.log -executeMethod BuildScript.BuildAssetBundlesBatch $3 $4 • 用法:ABBuildScript.bat [src] [dst] [from] [to] ビルドスクリプトの例
  41. 41. COPYRIGHT 2015 @ UNITY TECHNOLOGIES マルチプロセスビルドHack public static void BuildAssetBundlesBatch() { // Choose the output path according to the build target. string outputPath = Path.Combine(kAssetBundlesOutputPath, BaseLoader.GetPlatformFolderForAssetBundles(EditorUserBuildSettings.activeBuildTarget) ); if (!Directory.Exists(outputPath) ) Directory.CreateDirectory (outputPath); string [] args = System.Environment.GetCommandLineArgs(); int startRatio = int.Parse(args[9]); int endRatio = int.Parse(args[10]); string [] allAssetBundleNames = AssetDatabase.GetAllAssetBundleNames(); int counter = allAssetBundleNames.Length * startRatio / 100; int counter_end = allAssetBundleNames.Length * endRatio / 100; AssetBundleBuild[] buildMap = new AssetBundleBuild[counter_end - counter]; int num = 0; for( int i=counter ; i<counter_end ; i++ ) { string abname = allAssetBundleNames[i]; buildMap[num].assetBundleName = abname; buildMap[num].assetNames = AssetDatabase.GetAssetPathsFromAssetBundle(abname); num++; } BuildPipeline.BuildAssetBundles (outputPath, buildMap, 0, EditorUserBuildSettings.activeBuildTarget); } BuildScript.cs
  42. 42. COPYRIGHT 2015 @ UNITY TECHNOLOGIES マルチプロセスビルドHack • 結果! • x1 16:16 • x2 8:12 • x4 5:03 • x5 4:43 • x8 3:26 (MacBookPro Retinaコア4) •ほぼ比例して時間短縮できる
  43. 43. COPYRIGHT 2015 @ UNITY TECHNOLOGIES マルチプロセスビルドHack • 注意点 • 未来永劫使えるとも限らない! • そもそもUnityのAssetBundleビルドがマルチスレッド 化すればいいのでは… • 運用には自己責任で…
  44. 44. COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2015 @ UNITY TECHNOLOGIES ビルド
  45. 45. COPYRIGHT 2015 @ UNITY TECHNOLOGIES ビルドの変更点 • IL2CPP • 64bit対応のため • ビルドサイズ問題は? →まさに今、対応中 • Use IL2CPP precompiled header • Xcodeビルド時間短縮(例: 63sec→54sec) • Prebake Collision Meshes • 事前にMeshColliderの計算をしておく • サイズが若干大きくなるトレードオフ
  46. 46. COPYRIGHT 2015 @ UNITY TECHNOLOGIES UnityEditor.iOS.Xcode • 待望のXcodeプロジェクトを直接編集可能に! • frameworkの追加/コンパイルオプションの追加/lib,headerパ スの追加 • ドキュメントがまだない • https://bitbucket.org/Unity-Technologies/iosnativecodesamples/ src/a0bc90e7d6358e456caf25d717134864218740a7/ NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/ XcodeProjectUpdater.cs?at=stable • http://bit.ly/1CSDBYo (短縮URL)
  47. 47. COPYRIGHT 2015 @ UNITY TECHNOLOGIES UnityEditor.iOS.Xcode [PostProcessBuild] public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); string target = proj.TargetGuidByName("Unity-iPhone"); // こうやって他frameworkとかを追加 CopyAndReplaceDirectory("Assets/OpenCVForUnity/iOSforXcode/opencv2.framework", Path.Combine(path, "Frameworks/opencv2.framework")); proj.AddFileToBuild(target, proj.AddFile("Frameworks/opencv2.framework", "Frameworks/opencv2.framework", PBXSourceTree.Source)); File.WriteAllText(projPath, proj.WriteToString()); } } http://bit.ly/1CSDBYo
  48. 48. COPYRIGHT 2014 @ UNITY TECHNOLOGIESCOPYRIGHT 2015 @ UNITY TECHNOLOGIES Plug-in
  49. 49. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Plug-in の変更点 • Plugins フォルダ以外でも追加可能 • それぞれを個別で選択可能 • 重複も可能()
  50. 50. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Plug-in の変更点 • 依存するFrameworkを選択可 • コンパイルオプションを設定可
  51. 51. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Plug-in の変更点 • 「全部再設定しなくちゃいけないの?」 →インポート時に Plugins/iOS/ に置けば自動的に認識 • 「画像とかPluginとして認識されないけど」 → Plugins フォルダに置きましょう
  52. 52. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Native Code Plug-in (復習) [DllImport("__Internal")] private static extern void callNativeFunc(); void callNativeFunc() { [[TheNativeClass instance] theFunc]; } @implementation TheNativeClass static TheNativeClass *instance_ = nil; + (TheNativeClass *)instance{ if (!instance_) { instance_ = [TheNativeClass new]; } return instance_; } - (void)theFunc { NSLog(@“call func”); } @end Unityからネイティブ の関数を呼び出し CからObjCを 呼び出し ObjCを呼び出し
  53. 53. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Native Code Plug-in (直接呼出し型) • ObjC.cs public class ObjC { [DllImport("__Internal")] public static extern IntPtr objc_getClass (string name); [DllImport("__Internal")] public static extern IntPtr sel_registerName (string name); [DllImport("__Internal")] public static extern IntPtr objc_msgSend (IntPtr self, IntPtr op); }
  54. 54. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Native Code Plug-in (直接呼出し型) IntPtr instance; IntPtr classInfo; void Start() { classInfo = ObjC.objc_getClass("TheNativeClass"); instance = ObjC.objc_msgSend(ObjC.objc_msgSend(classInfo, ObjC.sel_registerName(“alloc")), ObjC.sel_registerName("init")); } ObjCを 呼び出し @implementation TheNativeClass - (void)theFunc { NSLog(@“call func”); } @end void Update() { ObjC.objc_msgSend(instance,ObjC.sel_registerName(“theFunc")); } ObjCを 直接呼んで instance生成 ObjC関数を 直接呼び出し
  55. 55. COPYRIGHT 2015 @ UNITY TECHNOLOGIES Native Code Plug-in (直接呼出し型) • 利点 • C → ObjCの橋渡し部分のコードを書かなくても良い • Singletonを使わない • 注意点 • 引数が使えない • http://tsubakit1.hateblo.jp/entry/2014/08/14/022012

×