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
Firebase Remote Config for JavascriptをWebGLで使う
Search
Jerome_1010
November 20, 2019
Programming
48
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Firebase Remote Config for JavascriptをWebGLで使う
https://learning.unity3d.jp/4161/
https://www.youtube.com/watch?v=XAooJ7qZ-j8
Jerome_1010
November 20, 2019
More Decks by Jerome_1010
See All by Jerome_1010
自作ブログ with Cloudflare Pages
jerome_1010
0
91
Age-Friendly Web UI
jerome_1010
0
28
三週間リモートワークしてわかった 仕事・生活でのtips / Tips for Remote Work with my 3weeks experience
jerome_1010
0
410
Other Decks in Programming
See All in Programming
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
620
一人だけ、Kiroが静止する日
hideg
0
110
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
280
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
270
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
570
A2UI for Android: Safely Rendering AI-Generated UI with Jetpack Compose - DroidKaigi 2026
itsmedreamwalker
0
140
wkhtmltopdfの次どうするか問題2026
willnet
1
100
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
280
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
280
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.2k
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Done Done
chrislema
186
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Automating Front-end Workflow
addyosmani
1369
210k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
Designing for Timeless Needs
cassininazir
1
480
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Transcript
Firebase Remote Config for Javascriptを WebGLビルドしたゲームで使ってみる 2019/11/20 @Gotanda.unity #14
今日話すこと - Firebase Remote Config for Javascript をWebGLビルドしたゲームで使おうとし てやったこと -
試してみてうまく実装できなかったパターンも載せます - “なぜJavascript?”については後ほど
じぇろめ Twitter @Jerome_1010 Web Engineer, Director / Game Developer.
こんなの作りました Halloween Scramble!! @unity1week “さがす” Voxel models
目次 - Firebase Remote Config - やりたいこと - なぜ for
Javascript - 構成 - 実装内容 - 結果 - まとめ - お世話になったリンク - おまけ:ボツ構成案
Firebase Remote Config - Remote で変更できる Config - リリース無しでアプリ内の文章や画像などを切り替えられる -
ABテストやキャンペーンに便利 - 全ユーザーの10%だけ新UIを試したり - iOS, Android, C++, Unityで使える - 最近Web(Javascript)でも使えるように
やりたいこと - WebGLビルドしたゲームにFirebase Remote Configを入れてA/Bテストしたい! - unityroomで公開したり - Firebase hosting使って公開したり
- 「Webですぐ出せる」というのがA/Bテストと噛み合っていそう - アプリ出すための審査や申請が不要 - プロトタイプでもすぐ遊んでもらえる
普通に導入すればいいのでは?
普通に導入すればいいのでは? ->厳しい理由がある
なぜfor Javascript
なぜfor Javascript - Firebase for UnityはWebGLビルドに対応していない ・FirebaseAnalytics.unitypackage ・FirebaseAuth.unitypackage ・FirebaseDynamicLinks.unitypackage ・FirebaseRemoteConfig.unitypackage
… Build OK OK NG
・firebase-app.js ・firebase-auth.js ・firebase-database.js ・firebase-analytics.js ・firebase-remote-config.js … なぜfor Javascript - 仮説:WebGLビルドしてからJavascript向けの機能を使えばいいのでは?
Build Firebase Server
- ビルド時に生成されるindex.htmlにscriptタグを追加 - javascriptからゲーム内のオブジェクトとメソッドを指定して実行 構成 Firebase Server Build fetch remote
config values Update text in methods Call methods
実装内容 <head> <script src="/__/firebase/7.3.0/firebase-app.js"></script> <script src="/__/firebase/7.3.0/firebase-auth.js"></script> <script src="/__/firebase/7.3.0/firebase-database.js"></script> <script src="/__/firebase/7.3.0/firebase-messaging.js"></script>
<script src="/__/firebase/7.3.0/firebase-storage.js"></script> <script src="/__/firebase/7.3.0/firebase-analytics.js"></script> <script src="/__/firebase/7.3.0/firebase-remote-config.js"></script> <script src="/__/firebase/init.js"></script> <script src="TemplateData/UnityProgress.js"></script> <script src="Build/UnityLoader.js"></script> <script> var unityInstance = UnityLoader.instantiate("unityContainer", "ビルドを判定するためのjson", {onProgress: UnityProgress}); </script> </head>
実装内容 window.onload = function() { try { let app =
firebase.app(); setRemoteConfig(); } catch (e) { console.error(e); }; };
実装内容 function setRemoteConfig() { const remoteConfig = firebase.remoteConfig(); remoteConfig.settings =
{ minimumFetchIntervalMillis: 3600000, }; remoteConfig.defaultConfig = ({ 'text_param': 'firebase value is not loaded! this is default!', }); remoteConfig.fetchAndActivate().then(() => { var configText = remoteConfig.getString('text_param'); unityInstance.SendMessage("GameManager", "UpdateText", configText); }) .catch((err) => { console.error(err); }); };
実装内容(firebase側) - 言語によって出力するテキストを変える
結果 - 言語ごとに異なるテキストを出せた
まとめ - どうしてもjavascriptのライブラリを使いたいならこういう方法もありそう - index.htmlに書いたjsで実装するとunityroomに入れられないので工夫が必要(そ れをやろうとしたのがボツ構成・実装) - そもそもサクッとテストしたいならDeploygateとかで良いのでは。。。
お世話になったリンク 1/2 - Unity(WebGL)でC#の関数からブラウザー側のJavaScript関数を呼び出すまたは その逆(JS⇒C#)に関する知見(プラグイン形式[.jslib]) https://qiita.com/gtk2k/items/1c7aa7a202d5f96ebdbf - WebGL: ブラウザースクリプトとの相互作用 https://docs.unity3d.com/ja/current/Manual/webgl-interactingwithbrowserscript
ing.html - WebGLアプリをFirebaseにアップして遊べるようにする https://qiita.com/fukaken5050/items/03e07ba3700f5be8c35f
お世話になったリンク 2/2 - Unity(C#)+FirebaseをWebGLで使いたい①:環境整備編 http://robamemo.hatenablog.com/entry/2019/07/11/122923 - Firebase を JavaScript プロジェクトに追加する
https://firebase.google.com/docs/web/setup?hl=ja
ご清聴ありがとうございました おわり
- .jslibファイルを作りJSでやりたいことを書いた - 外部JS読み込みのためscriptタグをcreateElementしてsrcに各firebaseファイルを指定 - Remote Configから取得した値は_mallocしてstringToUTF8してC#に渡す - NGポイント -
scriptタグで指定した内容をうまく読めなかった - タイミングの問題でもありそうなので、非同期処理をうまくかければ問題ないかも ボツ構成 MyFirebase.jslib Firebase Server Build createElement *when load page Load fetch remote config values return config val call methods
ボツ実装内容(.jslib) LoadScripts: function() { var urls = [ 'https://www.gstatic.com/firebasejs/7.3.0/firebase-app.js', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-auth.js',
'https://www.gstatic.com/firebasejs/7.3.0/firebase-database.js', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-messaging.js', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-storage.js', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-analytics.js', 'https://www.gstatic.com/firebasejs/7.3.0/firebase-remote-config.js', ]; var head = document.getElementsByTagName('head'); urls.forEach( function (value) { var scriptTag = document.createElement('script'); scriptTag.setAttribute('src', value); head[0].appendChild(scriptTag); }); },
ボツ実装内容(.jslib) InitializeFirebase: function () { var firebaseConfig = { apiKey:
"xxxx", authDomain: "xxx", databaseURL: "xxx", projectId: "xxx", storageBucket: "xxx", messagingSenderId: "xxx", appId: "xxx", measurementId: "xxx" }; firebase.initializeApp(firebaseConfig); firebase.analytics(); }
ボツ実装内容(C#) using UnityEngine; using System.Runtime.InteropServices; public class GameController : MonoBehaviour
{ [DllImport("__Internal")] private static extern void LoadScripts(); [DllImport("__Internal")] private static extern void Initializer(); private void Start() { LoadScripts(); InitializeFirebase(); } }