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からREST APIを叩く~NCMBでランキング機能プラグインを作った話~
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takaaki Ichijo
September 06, 2017
Technology
990
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UnityからREST APIを叩く~NCMBでランキング機能プラグインを作った話~
UnityからREST APIを叩く~NCMBでランキング機能プラグインを作った話~
Takaaki Ichijo
September 06, 2017
More Decks by Takaaki Ichijo
See All by Takaaki Ichijo
Unity対応してるmBaaS 全部紹介する(ハイパーリンクが機能してない版)
takaaki_ichijo
0
1.8k
クロスフェードやランダム再生などのサウンド演出開発をADX2で省力化する : Gotanda.unity 9
takaaki_ichijo
0
180
Unity x NCMBで小規模ゲームアプリへのソーシャル要素導入
takaaki_ichijo
0
7.9k
Unity+NCMBで作るカスタムステージのオンライン共有システム
takaaki_ichijo
0
1k
Other Decks in Technology
See All in Technology
AIにブラウザを触らせて、E2EテストをPlaywrightで書く
koji_kawamura
0
410
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
460
NANDでも描画したい!
nichica906
3
690
長期運営で肥大化したExcelマスターデータの解消に向けた移行事例
gree_tech
PRO
0
460
アクセスキー流出時の対応で再認識した攻撃側と防御側の非対称性について
kazzpapa3
0
110
会計事務所と顧問先の契約関係をOIDC・OAuthで表現する
terara
0
140
Kiro5兄弟のいまどきのセキュリティ基礎知識
kentapapa
0
100
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
180
AI・HPC開発を支えるGPU環境の新しい選択肢 液冷GPUシステム「AquSys」の取り組み
gpuunite_official
0
240
Oracle MCP Servers Explained
thatjeffsmith
1
480
安全性・開発速度・ユーザー体験の あいだで考える 事業会社のプロダクトセキュリティ
mixi_engineers
PRO
0
110
三人寄ればチューリング完全
puhitaku
6
3.1k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Abbi's Birthday
coloredviolet
3
9.4k
Un-Boring Meetings
codingconduct
0
390
AI: The stuff that nobody shows you
jnunemaker
PRO
9
940
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
Side Projects
sachag
455
43k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
580
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
790
Raft: Consensus for Rubyists
vanstee
141
7.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
UnityからREST APIを叩く ~NCMBでランキング機能プラグインを作った話~ @Takaaki_Ichijo
自己紹介:@Takaaki_Ichijo • 株式会社ヘッドハイ 代表取締役 • ゲーム作家 • 「Back in 1995」
• Game DevRel • NCMBエヴァンジェリスト • Play,Doujin! ディレクター • 専門誌でのライター活動 • GamesIndustry.biz Japan Edition • 趣味 • 刀剣おじさん、ユーリ!!! on ICE おじさん
REST APIをUnityから使おうと思ったきっかけ • NCMB SDK for UnityがWebGLで動かない • 現在対応版開発中とのこと •
理由:Unity WebGLは.Netのクラスがいくつか使えない • System.Threadingが使用出来ない • HttpWebRequest(System.Net)が使用出来ない • NCMBはREST APIを提供しているので、これを利用する
これからはWebGLがじわじわくるぞ • 大手アプリパブリッシャーがWebGLを視野に入れてきた • Unity WebGLがかなり良くなってきた • AppleやGoogleに3割取られない • PCでプレイしてもらうってのは意外と機会がある
• 具体例:会社で休憩中に遊ぶ • Unity1週間ゲームジャムの存在 • WebGLでゲームを提出する
おさらい:REST APIとは • REST(REpresentational State Transfer) • Webサービスの設計モデル • RESTが定義する設計原則に従ったAPIをRESTful
APIと呼ぶ • 特徴 • アクセスのインターフェースが統一されている • PUT, GET, POST, DELETEの4つのメソッド • 異なるサービスでも使い勝手が同一 • 送受信するデータ形式にはJSONが利用されている場合が多い • JSONであることはRESTの要件ではない
REST APIの利用方法はコマンド curl -X GET -G ¥ -H "X-NCMB-Application-Key:6145f91061916580c742f806bab67649d10f45920246ff459404c46f00ff3e56"¥ -H
"X-NCMB-Timestamp:2013-12-02T02:44:35.452Z"¥ -H "X-NCMB-Signature:/mQAJJfMHx2XN9mPZ9bDWR9VIeftZ97ntzDIRw0MQ4M="¥ -H "Content-Type: application/json"¥ --data-urlencode 'where={"testKey":"testValue"}'¥ https://mb.api.cloud.nifty.com/2013-09-01/classes/TestClass こんなやつ:
Unityの場合:UnityWebRequest • UnityWebRequest • UnityWebRequest は、Unity の WWW クラスをリプレースしたもの です。HTTP
リクエストを構成し、HTTP レスポンスを処理するため のモジュラーシステムを提供します。 (マニュアルより) https://docs.unity3d.com/jp/530/Manual/UnityWebRequest.html
3つのパート • サーバーにデータを送信する • UploadHandler • サーバーからのデータを受信する • DownloadHandler •
HTTP フロー制御(リダイレクト、エラー処理、他) • UnityWebRequest • REST API を叩く場合、こいつにコマンドと同じ情報を詰める
public IEnumerator Get() { UnityWebRequest request = UnityWebRequest.Get( “URL” );
//5.3以降はGetTextureとかもある yield return request.Send(); if (request.isError) //2017.1以降は request.isNetworkError { Debug.Log(request.error);//エラー内容 } else { byte[] data = request.downloadHandler.data; //~取得したデータの処理~ } }
REST APIを叩く手順 1. エンドポイントの生成 • URL 2. クエリストリングの生成 • URLの末尾にパラメーターをつけてサーバーに渡す方法
?hoge=value&huga=123456 みたいな文字列 3. タイムスタンプの取得 4. シグネチャ(署名)の生成 5. UnityWebRequestに上記の情報を詰める 6. リクエストを送信
シグネチャ(署名)のしくみ 一定条件でURLやデータからハッシュ生成、暗号化して添付 mQAJJfMHx2XN9mPZ9bDWR9VIeftZ97ntzDIRw0MQ4M みたいな文字列 ↓ サーバー側でも同条件で生成 ↓ ハッシュが一致しているか検証 ↓ データの改ざんを検出できる
手順 1. 元となる文字列:以下を連結 • アプリケーションキー • シグネチャメソッド • シグネチャバージョン •
タイムスタンプ • クエリストリング 2. メッセージとクライアントキーを秘密鍵としてHMAC- SHA256ハッシュを求める 3. ハッシュをBase64でエンコード
実行手順 1. UnityWebRequestのインスタンスを作って、エンドポイント+クエリ ストリングを指定 2. UnityWebRequest.SetRequestHeaderにヘッダー情報を入れる 3. 受信したデータを格納するためにDownloadHandlerBufferを追加する
UnityWebRequest request = UnityWebRequest.Get(endpoint += "?" + queryString.Trim('&')); request.SetRequestHeader("X-NCMB-Application-Key", applicationKey);
request.SetRequestHeader("X-NCMB-Signature", signature); request.SetRequestHeader("X-NCMB-Timestamp", timestamp); request.SetRequestHeader("Content-Type", "application/json"); request.downloadHandler = new DownloadHandlerBuffer(); yield return request.Send(); if (request.isError) { Debug.Log(request.error); yield break; } else { yield return request.downloadHandler.text; }
成果物 • LeaderboardForUnityWebGL • https://github.com/NCMBMania/LeaderboardForUnityWebGL • Unity WebGLゲームに簡単にリーダーボード(ランキング)をつけられる • REST
API利用なのでPC/Mac/iOS/Androidでも普通に動く • デモ • https://unityroom.com/games/leaderboarddemo • https://unityroom.com/games/containership
まとめ • REST APIは(そこそこ簡単に)Unityから使える • 巷にあるさまざまなwebサービスとUnityを簡単に連携できる • NCMB SDK for
Unityについて • 今冬に向けて大改装中 • そのときには公式SDKがWebGL対応します!