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 as a Libraryで実現する視聴者介入型ライブゲーミング
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Sugaya
October 05, 2022
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Unity as a Libraryで実現する視聴者介入型ライブゲーミング
Sugaya
October 05, 2022
More Decks by Sugaya
See All by Sugaya
個人開発でも使ってみよう Addressable Asset System
tetsujp84
0
2.8k
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
990
Building AI with AI
inesmontani
PRO
1
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Exploring anti-patterns in Rails
aemeredith
4
510
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
WENDY [Excerpt]
tessaabrams
14
39k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Transcript
Unity as a Libraryで実現する 視聴者介入型ライブゲーミング 〜動作の仕組みやネイティブとの役割分担をご紹介〜 ミラティブ 菅谷
自己紹介 • 菅谷(twitter:tetsujp84) ◦ 2020〜 ミラティブ ◦ Unityエンジニアマネージャー ◦ エモモ開発・ライブゲーミング開発
Mirrativ • スマホでかんたんにアバター配信 ができる顔出しナシのゲーム配信 プラットフォーム • 画面共有機能を使って、スマート フォンゲームやMirrativのオリジ ナルゲームが遊びながら配信でき る
今回のLT内容 • CEDEC 2022にてライブゲーミングについて紹介 ◦ ミラティブでのモバイル×ライブゲーミングへの取り組みと挑戦 https://cedil.cesa.or.jp/cedil_sessions/view/2644 • Unity as
a Libraryを用いたライブゲーミングの仕組みにフォーカスし て解説
Mirrativのライブゲーミング • ライブ配信機能とゲームの機能とが密に連動したものを 「ライブゲーミング」と呼称 • Mirrativのアプリ内でライブゲーミングが遊べる
ライブゲーミングの機能例 視聴者から贈られたギフトがリアルタイムにゲームで使えるアイテムになります ギフトを贈ると配信者にお助けアイテムが届く 「視聴者介入型」のゲーム 視聴者 配信者
ライブゲーミングの実現方法 • 1つのアプリ上で配信をしながらゲームを動かす ◦ ライブ配信の機能が必要 ◦ ゲームの機能が必要 • ライブ配信やギフトはネイティブで、ゲームはUnityで実装し、 1つのアプリに両方の機能を入れる
◦ Unity as a Libraryでの実装例を紹介
Unity as a Library • Unityで開発した機能をネイティブモバイルアプリに直接挿入する技術 • ネイティブの機能とUnityの機能を1つのアプリとして同時に利用できる
MirrativとUnity as a Library • Mirrativアプリ内にUnityで開発した ゲームを含めて動かす Mirrativアプリ Unity as
a Library WebGLゲーム ゲーム Unityで表示 ネイティブで表示
ギフトによる視聴者介入の流れ 1. 視聴者がギフトを送る 2. Mirrativサーバーにリクエストが届く 3. サーバーからBCSVRを使って配信者にギフト情報を送る BCSVR:Pub/Subを利用した双方向リアルタイム通信を実現する仕組み 4. 配信者のネイティブ領域がギフト情報を受け取る
5. ギフト情報をネイティブからUnityにメッセージング 6. メッセージの内容に応じてゲーム内処理を実行
ギフトによる視聴者介入の流れ 視聴者→サーバー→ネイティブ→Unityの順でメッセージングが行われる
ネイティブとUnity連携のサンプル • ネイティブからUnityへのメッセージングはsendMessageToGOを利用 • 起動中のゲームごとにパラメータに応じた処理を実行 // sendMessageToGOで情報を送る UnityFramework.getInstance()?.sendMessageToGO( withName: “ApiHandler”,
functionName: “MiniGameInput”, message: “パラメータ”) iOS(Swift) // 同一名のオブジェクト、メソッドを用意して情報を受け取る public class ApiHandler : MonoBehaviour { public void MiniGameInput(string parameter) { // 起動中のゲームごとにパラメータに応じた処理を行う currentMiniGame.Input(parameter) Unity
Unity内でのパラメータ処理 • パラメータはフォーマットルールを決めて処理を分岐 • 「,」でKeyとValueを区切る、ValueはJsonで渡すフォーマット parameterの形式例:以下のようなフォーマットでネイティブから送られる gift,ギフト内容のJson(ID、贈ってくれたユーザー情報、時間、量など)のBase64エンコード public class MiniGame
{ public void Input(string parameter) { // 「,」でkey,valueを判定 var codes = parameter.Split(','); switch (codes[0]) { // パラメータがギフトのもの case “gift”: var input = Utility.Base64ToUtf8(codes[1]); var effect = JsonConvert.DeserializeObject(input); // ギフトの内容に応じた効果処理を実行 Unity
通信処理の特徴 • サーバーからのギフト情報はネイティブが仲介する ◦ アプリに元からあるギフトの仕組みが使える ◦ ネイティブ/Unityが二重で受け取ることを避ける ◦ Unityに対応したBCSVRのPub/Subの仕組みがない •
所持アイテムの取得など、ゲーム固有のAPI通信はUnityが行う ◦ 以前はAPI通信もネイティブが行っていた ◦ ネイティブが中継するだけになることが多かったため、Unityとサー バーとが直接通信できるようにした
ライブゲーミングでのネイティブの役割 • BCSVRから受け取るコメント・ギフト情報の管理・表示 • Unity領域の起動・終了・初期化処理 ◦ UnityでAPI通信を行うためのログイン情報の共有 • 一部UIの表示 ◦
Mirrativ内で既にネイティブで実装しており、再利用したいUI ▪ コメント画面、ガチャ画面 ◦ Unityプロジェクトには含まれない画像を表示するようなUI ▪ ユーザーのアイコンを表示するランキング画面 • (メリット)ゲーム内容によらず共通化がしやすい
ライブゲーミングでのUnityの役割 • ゲーム本体の動作 ◦ ユーザーからのゲーム操作の受付 ◦ ゲーム内UIの表示 • APIサーバーとの通信 ◦
ユーザーのアイテム取得通信、ゲームクリア通信など • (メリット)通常のUnityでのゲーム開発と近い開発ができる
まとめ • ライブ配信とゲームとが連動したライブゲーミングに挑戦 • ライブゲーミングの例:ギフトを使った視聴者介入 • Unity as a Libraryを使ってネイティブとUnityとを連携させる
• ネイティブ・Unityが持つそれぞれのメリットが活かせる