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
Takaaki Ichijo
September 06, 2017
Technology
0
920
UnityからREST APIを叩く~NCMBでランキング機能プラグインを作った話~
UnityからREST APIを叩く~NCMBでランキング機能プラグインを作った話~
Takaaki Ichijo
September 06, 2017
Tweet
Share
More Decks by Takaaki Ichijo
See All by Takaaki Ichijo
Unity対応してるmBaaS 全部紹介する(ハイパーリンクが機能してない版)
takaaki_ichijo
0
1.7k
クロスフェードやランダム再生などのサウンド演出開発をADX2で省力化する : Gotanda.unity 9
takaaki_ichijo
0
160
Unity x NCMBで小規模ゲームアプリへのソーシャル要素導入
takaaki_ichijo
0
7.7k
Unity+NCMBで作るカスタムステージのオンライン共有システム
takaaki_ichijo
0
980
Other Decks in Technology
See All in Technology
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
7.3k
上長や社内ステークホルダーに対する解像度を上げて、より良い補完関係を築く方法 / How-to-increase-resolution-and-build-better-complementary-relationships-with-your-bosses-and-internal-stakeholders
madoxten
13
7.6k
Create a Rails8 responsive app with Gemini and RubyLLM
palladius
0
120
AIにどこまで任せる?実務で使える(かもしれない)AIエージェント設計の考え方
har1101
3
1.1k
マルチテナント+マルチプロダクト SaaS への AI Agent の組み込み方
kworkdev
PRO
2
330
Snowflake Intelligenceで実現できるノーコードAI活用
takumimukaiyama
1
220
TODAY 看世界(?) 是我們在看扣啦!
line_developers_tw
PRO
0
160
キャディでのApache Iceberg, Trino採用事例 -Apache Iceberg and Trino Usecase in CADDi--
caddi_eng
0
110
IIWレポートからみるID業界で話題のMCP
fujie
0
200
OCI Oracle Database Services新機能アップデート(2025/03-2025/05)
oracle4engineer
PRO
1
140
CIでのgolangci-lintの実行を約90%削減した話
kazukihayase
0
230
Eight Engineering Unit 紹介資料
sansan33
PRO
0
3.4k
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
A designer walks into a library…
pauljervisheath
206
24k
Building an army of robots
kneath
306
45k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
For a Future-Friendly Web
brad_frost
179
9.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Faster Mobile Websites
deanohume
307
31k
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対応します!