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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takaaki Ichijo
September 06, 2017
Technology
0
970
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.8k
クロスフェードやランダム再生などのサウンド演出開発をADX2で省力化する : Gotanda.unity 9
takaaki_ichijo
0
170
Unity x NCMBで小規模ゲームアプリへのソーシャル要素導入
takaaki_ichijo
0
7.8k
Unity+NCMBで作るカスタムステージのオンライン共有システム
takaaki_ichijo
0
1k
Other Decks in Technology
See All in Technology
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
24
12k
Physical AI on AWS リファレンスアーキテクチャ / Physical AI on AWS Reference Architecture
aws_shota
1
130
QA組織のAI戦略とAIテスト設計システムAITASの実践
sansantech
PRO
1
140
RGBに陥らないために -プロダクトの価値を届けるまで-
righttouch
PRO
0
110
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
240
ADK + Gemini Enterprise で 外部 API 連携エージェント作るなら OAuth の仕組みを理解しておこう
kaz1437
0
200
Windows ファイル共有(SMB)を再確認する
murachiakira
PRO
0
280
君はジョシュアツリーを知っているか?名前をつけて事象を正しく認識しよう / Do you know Joshua Tree?
ykanoh
4
130
Amazon Qはアマコネで頑張っています〜 Amazon Q in Connectについて〜
yama3133
1
130
CloudFrontのHost Header転送設定でパケットの中身はどう変わるのか?
nagisa53
1
190
Phase02_AI座学_応用
overflowinc
0
2.9k
俺の/私の最強アーキテクチャ決定戦開催 ― チームで新しいアーキテクチャに適合していくために / 20260322 Naoki Takahashi
shift_evolve
PRO
1
450
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
400
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
160
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
460
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Are puppies a ranking factor?
jonoalderson
1
3.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
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対応します!