SlideShare a Scribd company logo
1 of 29
Download to read offline
Unity + NCMBで
ユーザ管理してみた
2016/07/23
@toRisouP
自己紹介
• 名前 とりすーぷ(@toRisouP)
• 本業はWeb系エンジニア
– 最近は主にScalaを書いてます
• 趣味でC#/Unity開発をやってます
今回話す内容
• NCMBでユーザ管理した話
– Unity要素薄いけどごめんね
– まだ開発中で実運用に入ってないので、
紹介するやり方で問題が起きないとは言えません!
この方式を信用しないで!
開発中のゲーム
• 「ハクレイフリーマーケット」
– 東方二次創作ゲーム(PC向け同人ゲーム)
– ネットワーク対戦専用3Dアクション
使ってるもの
• ゲーム本体
– Unity
• 通信対戦部分
– Photon Cloud
• ユーザ管理
– Nifty Cloud Mobile Backend(NCMB)
– 自前のライセンス認証サーバ
やらなくてはいけないこと
• プレイヤーの登録・管理
– メールアドレスを使った登録
– パスワードログイン、パスワード再発行
• シリアルコードによるアクティベーション
– 未購入者は体験版モードで動作
– 購入者のみフル機能で遊べるようにしたい
どうやってやる?
• ユーザ情報自体の管理はNCMBで
– ユーザ情報を自前のサーバで持ちたくない
– ユーザ管理周りの機能はNCMBが完全にサポート
• アクティベーション機能は自作ライセンスサーバ
– 認証サーバを自作したほうが安いし汎用的
– NCMBのカスタムスクリプト機能でできたらよかったんだけど…
• 無料プランだと100回/月しか実行できないからきびしい
アクティベーションサーバ
• フレームワーク:Ruby on Rails
– ncmb-ruby-client をforkして改修して利用
– PostgreSQL + Redis
• ConoHa VPS(1Gプラン)にて稼働
– 単一サーバ構成
– ライセンスサーバが落ちててもゲーム自体は動くから…
• 少なくともアクティベーション済みユーザには影響なし
アクティベーションサーバ
• DBにシリアルコードをハッシュ化して保持
• クライアントからシリアルコードとobject idを受信する
– DBを参照して正しいコードか確認
– 送られてきたobject idのユーザが実在するか確認
– 問題なければNCMBのデータストアに購入フラグを保存
購入フラグ
• 購入フラグはNCMBのデータストアで管理
– ライセンスサーバが落ちててもゲームが動くようにしたいから
– ゲームログイン時にデータストアを検索して購入状態を確認する
図解
ゲームクライアント
アクティベーション
サーバ
シリアルコードと
ユーザID送信して認証
データストア更新
購入フラグを確認
絶対にやらないといけない設定
• 購入フラグはAdminのみ書き込み許可にする
– NCMBのACL(パーミッション設定)機能を利用
– ライセンス認証サーバからの操作のみ書き込み許可
– ユーザから勝手にフラグを書き換えられないようにする
図解
ゲームクライアント
アクティベーション
サーバ
☓
クライアントからは更新できない
(ACL設定で制御)
図解
ゲームクライアント
アクティベーション
サーバ
アクティベーションサーバは
Adminロールのユーザとしてログイン
ログインAPI
Session Token
SessionTokenはRedisにexpire付きで保存
揮発したら再度ログインAPIを叩く
図解
ゲームクライアント
アクティベーション
サーバ
シリアルコードと
ユーザID送信
課金フラグをセット
AdminのSession Tokenを利用して
データストア更新APIを実行
ACL設定周りの罠
ACLのリファレンス
• ACLの書き換え方(REST API)
「なるほど、許可したいところに
trueを設定するのか」
「ということは、不許可にするときは
falseにすればいいんだな!」
{
"acl": {
"role:Admin": {
"read": true,
"write": false
}
}
}
400 Bad Request
なんで?
• ACLの書き換え方(REST API)
– 不許可にするときは要素を定義しないが正解
– APIに対称性がないので感覚で使うと死ぬパターン
– リファレンスにわかりにくいけどちゃんと書いてある
ちなみに
• UnityからACLを書き換える時も注意が必要
– 下記のコードは何も起きない
– 何故か?
理由
• 「Userオブジェクト自体に更新が無いと通信処理を
行わない実装になっているから」
– 内部実装を読まないと気づかないよコレ…
解決策
• 明示的に代入をする
– Userオブジェクトに更新があったことを自覚させる必要がある
NCMBを使う上でのポイント
• わからなくなったらREST APIリファレンスから辿る
– リファレンスのUnityの項目は中途半端にしか書いてない
– APIパスでファイル内検索して実装を見つけてそこから辿ったほうが早い
• Unityプラグインの実装も読む
– 逆にREST APIの使い方がわからない場合、実装を読むとわかることがある
– NCMBObjectクラスの実装を理解すればとりあえずなんとかなる
• わからないことがあったら@Takaaki_Ichijoさんに聞く
– 無料プランだと技術サポートに問い合わせできない
– ユーザコミュニティは人がいなくてあんまり盛り上がってない
– 一條さんに問い合わせた方が早いかも
所感
• NCMBのユーザ管理はとても優秀
– メールアドレス認証やパスワード再発行も簡単にできる
– 無料でこれだけの機能が使えるのは良い
• ライセンスサーバ自分で作るの面倒くさかった
– 保守するものが増えるのはだるい…
– スクリプト機能が無料でもちゃんと使えたらよかったな…
• ACL周りの設定が罠っぽい
– REST API側もUnity Plugin側も両方罠っぽい
– リファレンスをわかりやすく書いてくれると嬉しいな…
未だにわからないこと
• 「ユーザが所属しているロールの取得方法」
– ロールに所属する会員一覧は取れるのだが…
• 逆引き方法はREST APIみてもよくわからなかった
– 結局ロールを使わない実装にして回避した
• その結果がデータストアで購入フラグを管理するというやり方
以上

More Related Content

What's hot

What's hot (20)

Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみたリアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
 
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろうサーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
 
猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について
 
ゲーム開発とデザインパターン
ゲーム開発とデザインパターンゲーム開発とデザインパターン
ゲーム開発とデザインパターン
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料
 
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライドCEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
 
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 

Similar to UnityとNCMBでユーザ管理を実装してみた話

リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたいリアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
YutoNishine
 
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』
モノビット エンジン
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
ゆるロボ製作所開発事例 – ドローコール削減
ゆるロボ製作所開発事例 – ドローコール削減 ゆるロボ製作所開発事例 – ドローコール削減
ゆるロボ製作所開発事例 – ドローコール削減
Mikito Yoshiya
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだこと
Katsutoshi Makino
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったこと
Kouji Hosoda
 

Similar to UnityとNCMBでユーザ管理を実装してみた話 (20)

誰でも今日から実践できるUnity x PlayFab(Demoパート)
誰でも今日から実践できるUnity x PlayFab(Demoパート)誰でも今日から実践できるUnity x PlayFab(Demoパート)
誰でも今日から実践できるUnity x PlayFab(Demoパート)
 
アプリエンジニアがサーバーサイドで最初に勉強するべきこと
アプリエンジニアがサーバーサイドで最初に勉強するべきことアプリエンジニアがサーバーサイドで最初に勉強するべきこと
アプリエンジニアがサーバーサイドで最初に勉強するべきこと
 
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたいリアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
 
Unity ゲーム開発
Unity ゲーム開発Unity ゲーム開発
Unity ゲーム開発
 
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』
【Drop wave】cedec2011『ネットワークゲーム時代に求められる、ゲームプランナーの基礎知識』
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
みくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウみくみくまうすについて&Unity で使えるコーディングノウハウ
みくみくまうすについて&Unity で使えるコーディングノウハウ
 
Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!
Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!
Webで3Dモデルはどう扱う?PlayCanvas:3Dモデルディープダイブ+新機能紹介!
 
ゆるロボ製作所開発事例 – ドローコール削減
ゆるロボ製作所開発事例 – ドローコール削減 ゆるロボ製作所開発事例 – ドローコール削減
ゆるロボ製作所開発事例 – ドローコール削減
 
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
WebRTCサービスを個人で運営してみた話
WebRTCサービスを個人で運営してみた話WebRTCサービスを個人で運営してみた話
WebRTCサービスを個人で運営してみた話
 
Unitynetwork
UnitynetworkUnitynetwork
Unitynetwork
 
Unity×HTMLで作るiPhone オンラインゲーム開発事例
Unity×HTMLで作るiPhone オンラインゲーム開発事例Unity×HTMLで作るiPhone オンラインゲーム開発事例
Unity×HTMLで作るiPhone オンラインゲーム開発事例
 
非ゲーム業界のデザイナーが CEDECに参加してきた
非ゲーム業界のデザイナーが CEDECに参加してきた非ゲーム業界のデザイナーが CEDECに参加してきた
非ゲーム業界のデザイナーが CEDECに参加してきた
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだこと
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったこと
 
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare verサーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
 
PhotonCloudで一ヶ月ゲーム作った話
PhotonCloudで一ヶ月ゲーム作った話PhotonCloudで一ヶ月ゲーム作った話
PhotonCloudで一ヶ月ゲーム作った話
 
ゲームエンジンの中の話
ゲームエンジンの中の話ゲームエンジンの中の話
ゲームエンジンの中の話
 

More from torisoup

More from torisoup (15)

Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunityUnityで作ったゲームをDLカードで配布してみた話 #roppongiunity
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
 
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しようARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解した
 
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
Photon Cloud ことはじめ
Photon Cloud ことはじめPhoton Cloud ことはじめ
Photon Cloud ことはじめ
 
アバター生放送支援アプリ「アバれぽ」
アバター生放送支援アプリ「アバれぽ」アバター生放送支援アプリ「アバれぽ」
アバター生放送支援アプリ「アバれぽ」
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
Task vs Observable
Task vs ObservableTask vs Observable
Task vs Observable
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
UniRxでPUNを使いやすくする
UniRxでPUNを使いやすくするUniRxでPUNを使いやすくする
UniRxでPUNを使いやすくする
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRx
 
Unity講習会(初級)
Unity講習会(初級)Unity講習会(初級)
Unity講習会(初級)
 

Recently uploaded

Recently uploaded (12)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

UnityとNCMBでユーザ管理を実装してみた話