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
940
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
990
Other Decks in Technology
See All in Technology
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
190
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
880
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3.2k
Snowflake×dbtを用いたテレシーのデータ基盤のこれまでとこれから
sagara
0
120
株式会社ログラス - 会社説明資料【エンジニア】/ Loglass Engineer
loglass2019
4
65k
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
210
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
620
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
240
S3アクセス制御の設計ポイント
tommy0124
3
200
データ分析エージェント Socrates の育て方
na0
6
2.2k
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
120
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
1.1k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
RailsConf 2023
tenderlove
30
1.2k
How STYLIGHT went responsive
nonsquared
100
5.8k
A better future with KSS
kneath
239
17k
Bash Introduction
62gerente
615
210k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Gamification - CAS2011
davidbonilla
81
5.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
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対応します!