Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Unityのframework化を支える技術
Search
tion-low
September 11, 2019
Programming
1.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Unityのframework化を支える技術
tion-low
September 11, 2019
Other Decks in Programming
See All in Programming
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
630
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
ChromeでローカルLLM
ryu1013
0
140
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Performance Optimization With LLMs
xleitix
0
110
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Being A Developer After 40
akosma
92
590k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
520
How to train your dragon (web standard)
notwaldorf
96
6.9k
Skip the Path - Find Your Career Trail
mkilby
1
260
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Deep Space Network (abreviated)
tonyrice
0
370
Building Applications with DynamoDB
mza
96
7.2k
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化を 支えてた技術
ご清聴ありがとうございました