Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

すごろくゲームでPlayFabの活用を検討

560 views

Published on

2020/04/25(土) 19:30 〜 20:30 に開催された PlayFab Meetup #3 (オンライン開催) で発表した資料です。
https://jpfug.connpass.com/event/171997/

Published in: Technology
  • Be the first to comment

すごろくゲームでPlayFabの活用を検討

  1. 1. すごろくゲームで PlayFabの活用を検討 2020/04/25 PlayFab Meetup #3 なかしょ(中島進也)
  2. 2. Profile • 名前:なかしょ(中島 進也) • Twitter:@nakasho_dev • ブログ:なかしょの技術日誌 http://nakasho-dev.hatenablog.jp/ • 最近の興味 TDD、LeanXP、DevOps、Xamarin、mBaaS、Tizen • 主な参加コミュニティ JXUG 、JPFUG 、.NETラボ、Cogbot、Teratail、TestNight、XPJUG ※本資料は私個人の意見であり、所属企業・部門見解を代表する ものではありません。 2
  3. 3. あるゲーム会社の一コマ 3 鉄道のすごろくゲームを開発しよう! ゲーム名は『ビリオン電鉄』にしよ う!はい、決定。 最初は無料でも良いから3か月後に開始 ね。PR準備しとくから。 ユーザを集めてから廃課金が望めるよ うな仕様にして! 位置情報使った仕組みとか用意すれば、 観光地や旅行会社からもお金を取る仕 組みができるんじゃね?オレ天才?! 社長 PM
  4. 4. 4
  5. 5. 5
  6. 6. やれることから始めよう 6 • 社長の意見はコロコロ変わるし仕様をしっかり決めるの難しい • アジャイルな開発で変化に対応していこう • ターゲットを明確にするためペルソナを作ろう • ユーザが満足する内容は? • ステークホルダー(社長)が満足する内容は? • ローンチのMVPを決めよう。
  7. 7. Minimum Viable Product (実用最小限の製品) • 顧客価値があり、利益を生み出せる最小限のもの • 最初の製品で完璧を狙わない 完璧であることよりも早く製品を市場に投入することが重要 7 顧客のフィードバックとともに製品が成長していく
  8. 8. なぜ最初から完璧を狙わないの? 8 リスク プロジェクト期間 完璧を狙った計画だと潜在 化したリスクに気づくのが 遅くなる。期間が長くなる ほどリスクは高くなる。 リスクを認識し計画をアッ プデートすることでリスク を減らす
  9. 9. 何を重要視したらよい? • 一番重要なのはユーザが求めている価値 • 誰でも提供できる価値では競争できない 9 ユーザが 求めている価値 自社が 提供できる価値 競合他社が 提供できる価値 Value Proposition
  10. 10. Lean Product Design 1. Conduct discovery research 2. Write a problem statement 3. Identify your assumptions 4. Select assumptions 5. Develop broad hypotheses 6. Prioritize broad hypotheses 7. Break down hypotheses 8. Groom the backlog 9. Plan the sprint and kick off the agile cycle 10https://lean-product-design.18f.gov/index.html (発見・研究) (課題文の書き出し) (仮定の特定) (仮定の選択) (広い仮説の立案) (仮説の優先順位付け) (仮説のブレークダウン) (バックログの整備) (スプリントを計画し、アジャイルサイクルを開始する)
  11. 11. すごろくゲームには何が必要 • ユーザを識別する • マップを表示する • キャラクターを表示する • サイコロを振る • 賽の目だけ移動する • 移動したマスでイベントを発生させる • イベントの結果でユーザの状態を変更 • ユーザの成績をランキングで表示 11
  12. 12. 限られたリソースでの開発 • 今回の開発者は2人のモバイルアプリがメインの経歴 1人はまったくサーバサイド開発経験なし • サーバサイドでの工数やリスクを減らしたい • ゲーム開発に特化したPlayFabというBackend as a Service があるらしい 12
  13. 13. Azure Play Fabの機能 13 参考:https://docs.microsoft.com/ja-jp/gaming/playfab/index#pivot=documentation&panel=quickstarts
  14. 14. どうやって検証しよう? • 開発者が参画するのは1か月後 • PlayFabに頼る場合、ゲームの仕様をBaaSに合わせていくこ とも必要 • PMは開発者経験が少なくJavaScriptが少し書けるだけ • ノンプログラマでもPlayFabを気軽に検証できる仕組みはな いかな? 14
  15. 15. Postman SDK 15 URL:https://docs.microsoft.com/en-us/gaming/playfab/sdks/postman/
  16. 16. 常に最新のリクエストが確認できる • admin • client • matchmaker • server • authentication • cloudscript • data • events • experimentation • insights • groups • localization • multiplayer • profiles 16 539件のRequest モデル (v2.2.1)
  17. 17. リクエスト例(匿名ログイン) 17 環境変数でタイトルID 等を設定 リクエストモデルの コレクション POSTするJSONデータ例が 入っている。 開くとAPIの説明が記 載されている
  18. 18. 返却値 18 { "code": 200, "status": "OK", "data": { "SessionTicket": "228931C107A37CBC--3726AF2A69B7582D-9CAE0-8D7E75B9881761C- R0B6FvdH7K/AedTHV/oi08ZnKVNIhYoKvB/XXXXXXXXX", "PlayFabId": "228931C107A37CBC", "NewlyCreated": true, "SettingsForUser": { "NeedsAttribution": false, "GatherDeviceInfo": true, "GatherFocusInfo": true }, "EntityToken": { "EntityToken": "Mnx7ImkiOiIyMDIwLTA0LTIzVDA3OjU0OjQ4LjI4NzU5MzJaIiwiaWRwIjoiQ3VzdG9tIiwiZSI6IjIwMjAtMDQtMjRUMDc6NTQ6ND guMjg3NTkzMloiLCJoIjoiQ0U3OEJGMzcxRTUzRDhCMiIsInMiOiJOTS9pclI0THF2NXE0S0pLSWhHM0ZseXNPSUFKd0VjMERnUmZiZHplMFMwPSIsI mVjIjoidGl0bGVfcGxheWVyX2FjY291bnQhOTY0NzdFNDhFNjE1N0VBMi85Q0FFMC8yMjg5MzFDMTA3QTM3Q0JDLzk2NDFFQjBEN0FFNDY1M0EvIi wiZWkiOiI5NjQxRUIwRDdBRTQ2NTNBIiwiZXQiOiJ0aXRsZV9wbGF5ZXJfYWNjb3VudCJ9", "TokenExpiration": "2020-04-24T07:54:48.287Z", "Entity": { "Id": "9641EB0D7AE4653A", "Type": "title_player_account", "TypeString": "title_player_account" } }, "TreatmentAssignment": { "Variants": [], "Variables": [] } } } ログインのAPIで返っ てくるSessionTicket の値が重要
  19. 19. PlayFab管理画面でも確認 19
  20. 20. (再掲)すごろくゲームには何が必要 • ユーザを識別する • マップを表示する • キャラクターを表示する • サイコロを振る • 賽の目だけ移動する • 移動したマスでイベントを発生させる • イベントの結果でユーザの状態を変更 • ユーザの成績をランキングで表示 20
  21. 21. ユーザを識別する • 匿名ログイン: LoginWithCustomID ユーザは気軽にゲームを利用したい • ソーシャルログイン:LoginWithXXXXX OAuth2やOpenID Connectを提供しているサービスでログイン Facebook、Google、Twitter、LinkedIn、Microsoft ユーザが端末を変える際などの引継ぎ、復旧機能に必要 ソーシャルなつながりを踏まえたフレンド検索 Facebookのフレンドを取得してゲーム内で検索 21
  22. 22. 用意されているログイン • CustomID • EmailAddress • PlayFab • AndroidDeviceID • IOSDeviceID • GameCenter • Apple • GoogleAccount • Facebook • FacebookInstantGamesId • NintendoSwitchAccount • NintendoSwitchDeviceId • Kongregate • PSN • Steam • Twitch • WindowsHello • Xbox • OpenIdConnect 22 NEW
  23. 23. ユーザデータの管理 23 Player Dataで「何マス進ん だ」などのカスタム属性も管 理できる
  24. 24. マップ・キャラクターを表示する • 2D TileMapとする • 各タイルはアプリに埋め込まずダ ウンロードしたい • タイル画像を管理したい。 • キャラの画像も管理したい。 24 A B C D E F G H I
  25. 25. コンテンツ管理機能ファイル管理画面 25 フォルダにより階層構造にし、直感的に管理可能
  26. 26. コンテンツ取得(X-Authorizationヘッダ) 26 ログイン時に取得したSessionTicketの値を環境 変数に設定する
  27. 27. コンテンツ取得(POST JSON) 27 フォルダ名「Characters」 ファイル名「train_character8_green.png」 のコンテンツを指定する際は以下となる { "Key": "Characters/train_character8_green.png“ } コンテンツを取得できるURLをもらえる。 このURLは常に有料
  28. 28. コンテンツのURLを開く 28
  29. 29. サイコロを振る • すごろくゲームにとってサイコロは重要である。 • 不正はされたくない。 • サイコロの目はサーバ側で決めたい。 • でも、PlayFabには『賽の目を出す』という機能はない。 29 そんなときは CloudScript
  30. 30. サイコロを振る(CloudScript) 1から6までを出すfunctionを作る(簡易版) handlers.dice = function (args, context) { var randomDice = Math.floor(6*Math.random())+1; return { result: randomDice }; }; 30 アイテムを使ってサイコロを3つ振る効果を出す際は argsにアイテム情報を渡して、アイテムの所持の確認、 消費処理を実装する必要がある
  31. 31. PostmanでCloudScriptを叩く 31 JSONデータでfunctionを指定する { "FunctionName": "dice"} ダイスを振った結果をもらえる "FunctionResult": { "result": 4 }
  32. 32. 賽の目だけ移動する • クライアント側で、正しく賽の目分移動した かをサーバ側で検証する必要がある • 出発マスと到着マスの情報だけだと、分岐に よる選択肢のある移動の場合、検証が大変 通った道が分からないと他プレイヤーへ呪いのな すり付けなどが判定できない • ADEHG、ABCFIとどのマスを通ったか全て 送ってもらってサーバで検証が安全 • CloudScriptでマップデータを元に検証 32 A B C D E F G H I
  33. 33. 移動したマスでのイベント 33 • CloudScriptで判定する • 移動したマスでどのようなイベントが起きるかはJSONで管理 するとして、『Title Data』と『File Management』のどちら に保存すべきか? • 『Title Data』は大きなサイズを扱えない • 『File Management』はCDN経由しかデータを受け取れないの で頻繁に使用するCloudScirptからのアクセスでは • いっそCosmosDB?
  34. 34. ユーザのランキング 34 リセットのタイミングでラン キングに基づいた報酬を付与 することもできる
  35. 35. 35 開発者参画までの最低限の調 査はできた。 これからはローンチ後の次の 更新に必要なMVPを検証しな ければ!
  36. 36. まとめ • PlayFabにはゲーム開発に必要な色々なものが揃っている サーバ側をゼロから作らず、PlayFabを活用していこう そのためにゲームの仕様をPlayFabに合わせることも大事 • ノンプログラマーはPostmanを活用することで、PlayFabの 仕様をより深く理解できる。 運用時にもPostmanを使用してPlayFabのデータを更新可能。 • ローンチ時にある程度の機能は必要だが完璧を狙わずに、開 発チームでできることをやっていこう。 36
  37. 37. ご清聴ありがとうございました。 なかしょ(中島 進也) @nakasho_dev 37

×