Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Unityのframework化を支える技術
Search
tion-low
September 11, 2019
Programming
1
1.4k
Unityのframework化を支える技術
tion-low
September 11, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
SourceGeneratorのススメ
htkym
0
200
CSC307 Lecture 08
javiergs
PRO
0
670
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
180
CSC307 Lecture 10
javiergs
PRO
1
670
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
760
Oxlint JS plugins
kazupon
1
1k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
230
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
480
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1.1k
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
The untapped power of vector embeddings
frankvandijk
1
1.6k
Code Reviewing Like a Champion
maltzj
527
40k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
140
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.3k
Un-Boring Meetings
codingconduct
0
200
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Transcript
Wright Flyer Live Entertainment Unityのframework化を 支える技術
自己紹介 • 清 貴幸 • WFLE, Inc. • エンジニア ◦
iOS ◦ Unity(NativePlugin) • 最近の事件 ◦ 港区に家を買おうとして心が 折れた ◦ 港区の家事情に詳しい人、仲 良くしてください
発表の概要
Unityアプリをframework化 してネイティブiOSアプリに 組み込みたい!!
背景
https://www.wantedly.com/companies/wrightflyer/post_articles/176535
これ https://www.wantedly.com/companies/wrightflyer/post_articles/176535
• iOSアプリを開発するために、まずUnityを入れる必要がある • Unityから出力したソースコードをimportしているためにクソ でかい差分が出やすい • .xcodeprojェ・・・ • 差分がでかいゆえにコンパイル時間がエグい •
クリーンビルドで600sec前後 framework化前に発生していた問題
やったこと
• Unityアプリのembedded framework化 • framework開発環境の用意 • インタフェイス整備 • リリースフローの変更 •
frameworkのリリース • ビルドしたframeworkの組み込み やったこと
Unityアプリの embedded framework化
• XcodeGenでframeworkビルド用プロジェクトを自動生成 • https://github.com/yonaskolb/XcodeGen framework開発環境の用意
• 最初はUnityから出力したxcodeprojをそのまま使うか迷った • 生成物なのでgit commitしづらい • 故にxcodeprojの拡張が大変になる • -> frameworkビルドできるxcodeprojを別途用意しよう
• -> ぶっちゃけXcodeGenでの自動生成を試してみたかった framework開発環境の用意
None
None
None
None
• Unityで開発したアプリをCLIだけでframework化できるよう になった framework開発環境の用意
• ネイティブアプリからUnityの機能を呼び出すときのインタ フェイスを作る必要がある • 複数のNativePluginに実装が散らばっていてわかりづらい • Unity <-> ネイティブアプリの連携方法が統一されてない インタフェイスの整備
None
ライブ配信 機能UI Unity(C#) Unity Native Plugin (ObjC++) iOS App (Swift
/ ObjC) 3Dモデル表示 フェイストラッ キング 機能 ライブ 配信機能 Unity ランタイム インタフェイス なんらかの イベント通知 Unity ランタイム
ライブ配信 機能UI Unity(C#) Unity Native Plugin (ObjC++) iOS App (Swift
/ ObjC) 3Dモデル表示 フェイストラッ キング 機能呼び出し ライブ 配信機能 呼び出し Unity 機能呼び出し なんらかの イベント通知 framework フェイストラッ キング 機能 ライブ 配信機能 フェイストラッ キング デリゲート ライブ配信 デリゲート Unity ランタイム Unity ランタイム インタフェイス
• Unity <-> ネイティブアプリの連携方法が統一された • ネイティブアプリとUnityのインタフェイスが単純明快になっ た • iOSエンジニアにとってなじみのあるインタフェイスになった •
デリゲートパターンを採用 • ライブ配信とフェイストラッキングのクラスをネイティブア プリプロジェクトに移動 • iOSエンジニアが修正しやすくなった インタフェイスの整備
リリースフローの変更
• submodule updateからframeworkリリースへ リリースフローの変更
REALITY iOS Repository REALITY iOS Proj REALITY Avatar Repository REALITY
Avatar Unity Proj REALITY Avatar iOS Proj Submodule 1. Avatarの Xcode Projを出力 2. 必要なファイルをコピー 3. アーカイブ 4. IPA出力
RealityAvatar .framework GCS 6. IPA出力 REALITY iOS Repository REALITY iOS
Proj RealityAvatar .framework REALITY Avatar Repository REALITY Avatar Unity Proj REALITY Avatar iOS Proj RealityAvatar .framework 5. アーカイブ 3. frameworkアップロード 1. AvatarのXcode Proj出 力後、コードコピー 2. frameworkのビルド 4. frameworkのダウンロード
• ネイティブiOSアプリを作るときはframeworkの依存解決する だけになった • frameworkへの依存解決はcurlでファイルを落として配置す るだけ • cocoapodsに対応させるか検討中 リリースフローの変更
結果
• iOSアプリを開発するために、まずUnityを入れる必要がある • -> 初期開発時にUnityがなくてもビルド可能に! • Unityから出力したソースコードをimportしているためにクソ でかい差分が出やすい • ->
frameworkのlinkになり、xcodeprojの差分が出なくなった • 差分がでかいゆえにコンパイル時間がエグい • クリーンビルドで600sec前後 • -> 結果
• NativePluginを開発する際にxcodeprojが使えるように • もともとはUnityのディレクトリ以下にファイルがぽつんと置いて あった。。 • ネイティブから使えるUnity機能の一覧がframeworkのヘッダ に集約されて一覧性が向上した • 開発時にiOS
Simulatorを利用しやすくなった • ソースコードimportだとここがかなりだるい 結果
やった感想
• NativePluginを開発する際にxcodeprojが使えるように • もともとはUnityのディレクトリ以下にファイルがぽつんと置いて あった。。 • ネイティブから使えるUnity機能がframeworkのヘッダに集約 されて一覧性が向上した • 開発時にiOS
Simulatorを利用しやすくなった • UnityでSImulator向けコードを吐き出してframeworkビルドするだ け • lipoを使えばで1バイナリにもできる やった感想
• XcodeGenは普通に便利でネイティブアプリ環境にも入れたい • ただしcocoapodsとの相性問題が少々あるらしい • iOS開発者の負担は減ったが、Unity側開発機能のリリースが 複雑になった • 自動化可能であり、模索中 •
Unityバージョンアップ時にメンテコストが掛かり続けるのを どうとらえるか • 年に1回の大掃除みたいなのが必要 やった感想
まとめ
• Unityアプリをframework化して組み込むとコンパイル時間等 の問題がなくなる • 仕組みの維持にメンテコストがかかるので、トレードオフは 考えよう • XcodeGenは良いもの まとめ
Appendix
Unity as a library
比較(個人の感想) 清の手法 (beta)Unity as a library framework作成機能 メンテコスト 高 -
NativePlugin 開発しやすさ 高 低 別プロジェクトへの 導入しやすさ 高 低 iOSエンジニア 親和性 高 中
• 機能的に足りないし、(betaなので)導入は先になりそう • いつかこれで良くなる日は来そう • frameworkのリリースフローの仕組み化はその後も運用可能 なので、その辺を頑張って行く 感想
Wright Flyer Live Entertainment Unityのframework化を 支える技術
Wright Flyer Live Entertainment Unityのframework化を 支えてた技術
ご清聴ありがとうございました