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
850
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.6k
クロスフェードやランダム再生などのサウンド演出開発をADX2で省力化する : Gotanda.unity 9
takaaki_ichijo
0
160
Unity x NCMBで小規模ゲームアプリへのソーシャル要素導入
takaaki_ichijo
0
7.6k
Unity+NCMBで作るカスタムステージのオンライン共有システム
takaaki_ichijo
0
890
Other Decks in Technology
See All in Technology
クラウド利用者の「責任」をどう果たす?AWSセキュリティ対策のススメ #AWSSummit
hiashisan
0
280
コンテナ・K8s研修 - 前半 コンテナ基礎・ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
E2Eテスト自動化プラットフォームにおけるAIの活用
shift_evolve
0
190
Classmethod Odyssey 登壇資料
yamahiro
0
390
頼られるのが大好きな 皆さんへ - 支援相手との期待の合わせ方、突き放し方 -/For_people_who_like_to_be_relied_on
naitosatoshi
1
290
ABEMAにおけるLLMを用いたコンテンツベース推薦システム導入と効果検証
cyberagentdevelopers
PRO
1
730
OSSコミットしてZennの課題を解決した話
dyoshikawa1993
0
150
大規模ドラレコデータ収集・機械学習基盤を支える AWS CDK 〜導入・運用事例紹介〜
pemugi
0
110
サービスの持続的な成長と技術負債について
siva_official
PRO
10
4.4k
テスト・設計研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
Datadog Cloud SIEMを使ってAWS環境の脅威を可視化した話/lifeistech-datadog-cloud-siem
gidajun
0
480
ギークの理想が7つ集まるエムスリーで夢を叶えよう - エムスリー株式会社
m3_engineering
1
260
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
93
13k
Designing Experiences People Love
moore
136
23k
Music & Morning Musume
bryan
43
5.9k
Designing for Performance
lara
604
67k
How to Think Like a Performance Engineer
csswizardry
4
590
No one is an island. Learnings from fostering a developers community.
thoeni
17
2.8k
Producing Creativity
orderedlist
PRO
340
39k
GraphQLとの向き合い方2022年版
quramy
36
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
Raft: Consensus for Rubyists
vanstee
134
6.5k
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対応します!