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
92
Age-Friendly Web UI
jerome_1010
0
28
三週間リモートワークしてわかった 仕事・生活でのtips / Tips for Remote Work with my 3weeks experience
jerome_1010
0
420
Other Decks in Programming
See All in Programming
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
ActionController meets Protocol Buffers
sorah
0
520
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
390
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
220
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.1k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
From π to Pie charts
rasagy
1
400
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Balancing Empowerment & Direction
lara
6
1.3k
sira's awesome portfolio website redesign presentation
elsirapls
0
460
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
KATA
mclloyd
PRO
35
16k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
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(); } }