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.

【Unite Tokyo 2019】AWS for Unity Developers

2,013 views

Published on

2019/9/25-6に開催されたUnite Tokyo 2019の講演スライドです。
下田 純也(アマゾンウェブサービスジャパン株式会社)
Fan Liang(アマゾンウェブサービスジャパン株式会社)

こんな人におすすめ
・クラウドサービスがどのような所で活用できるか知りたい
・AWSのサービス群を使ってみたいがどこから始めればよいかわからない
・マシンラーニング等新しいトレンドの活用をしてみたい

受講者が得られる知見
・AWSのサービス群(特にUnityゲームやアプリでの利用頻度が高いもの)に関する知見
・UnityからのAWSの利用方法
・最新のクラウド動向

Unityのイベント資料はこちらから:
https://www.slideshare.net/UnityTechnologiesJapan/clipboards

Published in: Technology
  • Download or read that Ebooks here ... ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

【Unite Tokyo 2019】AWS for Unity Developers

  1. 1. AWS for Unity Developers 下田 純也 エンジニアリングマネージャー Fan Liang ソリューションアーキテクト Amazon Web Service Japan K.K.
  2. 2. Agenda 3 Development On Cloud With Unity & AWS DevOnCloud概要 DevOnCloud検証 Game Development with Unity & AWS ゲームにおけるAWSとUnityの活用例 AWSとUnityを活用しマルチプレイヤーゲームの作り方 AWSとUnityと連携する際のTips
  3. 3. 自己紹介 4 シモダジュンヤ (Jun Shimoda) twitter @junyash アマゾンウェブサービスジャパン株式会社 Amazon Game Services & Studios Japan Engineering Manager 好きなAWSサービス:Amazon EC2 好きなUnity機能:C#が使える事! (実はC# 1.0からのC#使い、使えるとは言っていない)
  4. 4. 自己紹介 5 Fan Liang(ハン リャン) ソリューションアーキテクト ゲームのお客様を担当 好きな AWS サービス:Amazon GameLift 好きな Unity機能:Addressable Asset System
  5. 5. Development On Cloud With Unity & AWS 6
  6. 6. 開発環境の課題 7 • プロジェクトの規模の拡大 • 複雑でメンテナンスも大変になる • 規模拡大に伴う複数拠点化や外部との連携へのニーズ 大規模化するプロジェクト • プロジェクトの大規模化によるコードのビルドやアセットのビルド時間増大と労力増 • プロジェクト毎に1つしかないパイプライン ビルドパイプラインに費やされる時間と労力 • 品質を高めるためのテストの時間が増大している • テストの人員を増やすにも限界がある テストの手間の増大
  7. 7. 開発環境のAWS移行の目標 • 開発中のビルドにかかる時間やテストにかかる手間をコンピューテ ィングリソースのスケール・並列化削減 • 開発者はクリエイティブな活動に集中でき、作品の質を高める事に 注力可能となる 開発者の時間はクリエイティブな仕事に注力 • ビルや開発機器への設備投資を抑えつつ • 開発拠点の拡大やグローバル展開が可能となる 設備投資を抑えつつ、拠点拡大、グローバル展開
  8. 8. クラウド化のメリット・AWS化のメリット Cloud ・俊敏性 ・スケーラビリティ ・可用性 (物理的なトラブルや メンテナンスからの開放) AWS Step Functions: • AWS CodePipeline: フルマネージド CI/CD • AWS CloudFormation: 容易にパイプラインをコピー • Amazon EC2: Spot Instance/GPU instance • AWS Device Farm: デバイステスト (iOS/Android) • Amazon WorkSpaces: セキュアなVDI AWS Device Farm
  9. 9. Pipelineを自由に組み合わせて呼び出せる柔軟性 • 各パイプラインをCloudFormationでのテンプレート化や、CodePipeline等から自由に組 み合わせて呼び出したり、複数並列で起動したりできる. • これまでのオンプレのパイプラインだと、プロジェクト毎に1つ、かつドキュメント化されてい なかったり…これをシンプルにし並列でビルドさせたりもろもろできるようになる。
  10. 10. Unityのクラウド利用に関するライセンス変更 11 https://blogs.unity3d.com/jp/2019/01/16/updated-terms-of-service-and-commitment-to-being-an-open-platform/
  11. 11. VPN Direct Connect Office ビルドマシン (Mac) AWS Cloud VPC S3 CI サーバ ビルド時のみ EC2 を起動する事でコストを最適化 Androidビルド アセットバンドルビルド コー ド/ ア セ ット取 得 成果物 転送 ビルドサーバ GHE/Perforce Unity ビルドon EC2
  12. 12. 1台で10時間 10時間のビルド 1時間の ビルド +9時間の開発時間 $1.58 x 10台 x 1時間 = $15.8 $1.58 x 1台 x 10時間 = $15.8 = g3.4xlarge 10台で1時間 g3.4xlarge ビルドを加速ためのScale UpとScale Out ビルドタスクの並列化 c5.xlarge • vCPU 4個 • メモリ 8GiB c5.24xlarge • vCPU 96個 • メモリ 375GiB 高性能サーバ使用
  13. 13. Unity ビルドon EC2 Scale Up検証 検証内容: 1.クラウドでビルドできるか? 2.ハイスペックのインスタンスを利用して、ビルドは早 くなるかどうか? 計測方法: アセットバンドル、ゲーム本体をそれぞれ2回ビルドし、 平均時間を計測する。
  14. 14. Unity ビルドon EC2 Scale Up検証 Unityの検証サンプルプロジェクト: • バージョン:Unity 2018.4.6 • アセット数:約4000件(画像、ビデオ、音声) • Cs ファイル数:約2000件(プラグインも含めて) AWSの検証環境: windows server 2018 • c5.xlarge: vCPU 4個 / メモリ 8GiB • c5.4xlarge: vCPU 16個 / メモリ 32GiB c5.xlargeの約4倍 • c5.12xlarge: vCPU 48個 / メモリ 96GiB c5.xlargeの約12倍
  15. 15. アセットのビルド時間(windows) 757 738 732 0 200 400 600 800 1000 c5.xlarge c5.4xlarge c5.12xlarge ビルド時間(秒) 秒数
  16. 16. アセットバンドルビルド考察 17 マルチスレッドはサポートしていないため、コア数やメ モリが増やしても、アセットバンドルビルド自体は早くな りません(2019/9/25時点) 分散ビルドを検討する必要があります
  17. 17. ゲーム本体のビルド時間(windows) 832 287 206 92 42 36 0 200 400 600 800 1000 c5.xlarge c5.4xlarge c5.12xlarge ビルド時間(秒) IL2CPP Mono
  18. 18. IL2CPPビルド時間の考察(windows) 19 インスタンスの性能を上げると、ビルド時間が減少する 効果は線形ではないるので、利用する際に一番コストパ フォーマンス良いインスタンスを探す必要がある
  19. 19. 20 C++ Compilerはマルチコアを利用することによって、 本体のビルドを高速化できた IL2CPPビルド時間の考察(windows)
  20. 20. プラットフォームごとに並列化(IOS/Android) アセットの依存関係を注意しながら並列化 Cygames/ DeNAの資料をご参考していただければ 21 Unity ビルドon EC2 Scale Out注意点 https://www.slideshare.net/dena_tech/build-87960933 https://speakerdeck.com/cygames/yun-ying-zhong-kontentuniokeruda-xing-atupudetocheng- gong-falsetamefalsekao-efang-tounityzui-shi-hua-shou-fa?slide=67
  21. 21. Game Development with Unity & AWS 22
  22. 22. ゲームにおける AWSとUnityの活用例 23
  23. 23. ゲームにおけるAWSとUnityの活用例 24 APIサーバとしてゲームバックエンドでの利用 SDKを活用し、サーバなしで簡単な機能を実装する ゲームサーバとしてマルチプレイヤーゲームでの利用
  24. 24. ゲームにおけるAWSとUnityの活用例 25 APIサーバとしてゲームバックエンドでの利用 SDKを活用し、サーバなしで簡単な機能を実装する ゲームサーバとしてマルチプレイヤーゲームでの利用
  25. 25. AZ AZ CloudFront S3 ALB API(EC2/ECS) ElastiCache RDS(master) VPC API(EC2/ECS) ElastiCache RDS(slave) APIサーバとしてゲームバックエンドン構成 ロードバランサー APIサーバ キャッシュ データベース アセットバンドル配信
  26. 26. ゲームにおけるAWSとUnityの活用事例 27 DELiGHTWORKS様(開発・運営)過去のセッション 「Fate/Grand Orderにおける、ディライトワークス流Unity活 用術」 Unite2016 「Fate/Grand Orderにおける大規模なデータベース移行と負荷 試験」 AWSSummit 2019 『Fate/Grand Order』 1700万ダウンロードを突破した ヒットゲームにおけるAWSとUnity活用 ©TYPE-MOON / FGO PROJECT
  27. 27. ゲームにおけるAWSとUnityの活用例 28 APIサーバとしてゲームバックエンドでの利用 SDKを活用し、サーバなしで簡単な機能を実装する ゲームサーバとしてマルチプレイヤーゲームでの利用
  28. 28. UnityからAWSを利用する方法例 29 165個以上のAWSサービスに対し、SDKを利用 して、簡単にAPIレベルで活用するができる ゲーム内で写真をS3に簡単アップロード Amazon Pollyを利用して音声合成 …
  29. 29. AWSとUnityの組み合わせ 30 ゲーム内で写真が撮影されると、サーバに画像が送られ、サー バ上でサムネイル画像の作成の加工が行われます。 AWS Cloud Amazon S3 AWS Lambda
  30. 30. ゲームにおけるAWSとUnityの活用 31 APIサーバとしてゲームバックエンドでの利用 SDKを活用し、サーバなしで簡単な機能を実装する ゲームサーバとしてマルチプレイヤーゲームでの利用
  31. 31. API サーバ • 新規登録/ログイン • 認証認可, セッション管理 • ロビー/イベント • ステータス /リーダーボード • ゲームモード, オプション • マッチング • ゲーム終了, チート対策 ゲーム サーバ • ゲームマップホスト • セッション管理 • ゲームプレイ、マップ更新 • データ同期 • ユーザ機能; チート対策 • ゲーム終了レポート 典型的なマルチプレイヤーのゲームフロー
  32. 32. マルチプレイヤーオンラインゲームの実装 33 マルチプレイヤーのゲームサーバ 実装は? マッチメイキングはどうする? ステージ AWSサービス ステージ ステージ
  33. 33. Amazon GameLift 34 セッションベースのマルチプレイヤーゲーム専用のゲ ームサーバをデプロイ、運用、スケーリングするための マネージドサービスです
  34. 34. マルチプレイヤーオンラインゲームの実装 35 GameLiftでマネージド のマッチメイキングとサ ーバ管理を利用 ステージ AWSサービス ステージ ステージ Amazon GameLift
  35. 35. Amazon GameLift 36 手間のかかる作業は完了済 ソフトウェアをビルドするための エンジニア作業+GameLiftによ る信頼性の高い運用 低レイテンシの実現 16のAWSリージョンの中でプレ イヤーにとって最も近いゲーム サーバにセッションを割り当て キャパシティプランニングな しでローコスト&ハイスケール ユーザが必要なキャパシティを自 動でスケールアップ・ダウン、実際 に利用した分だけお支払い FlexMatchのカスタムマッ チメイクで高機能なゲーム プレイを実現 レイテンシのバランス、Wait時間、 対戦レベルに適した独自のマッ チメイキングロジックを実装
  36. 36. Unity上でのGameLift実装パターン Amazon GameLift Server SDK for Unity カスタム ゲームサーバ リアルタイム サーバ 接続 Amazon GameLift Amazon GameLift Amazon GameLift Realtime Client SDK クライアント クライアント ゲームサーバ ゲームサーバ ゲームサーバ 14
  37. 37. Unity上でのGameLift実装パターン Amazon GameLift Server SDK for Unity カスタム ゲームサーバ リアルタイム サーバ 接続 Amazon GameLift Amazon GameLift Amazon GameLift Realtime Client SDK クライアント クライアント ゲームサーバ ゲームサーバ ゲームサーバ 14
  38. 38. Node.jsベースのゲームサーバ Javascriptを使ってゲームサーバの振る舞いを定義 ステートフル or ステートレス TCP/UDP対応 1プレイヤーにつき1ヶ月あたり数円のコスト Amazon GameLift Realtime Servers GameLift Realtime Server
  39. 39. Unity with GameLift Realtime 40 • プレイヤー間で少量の データを交換 • 複雑度が低い処理 Role Playing Card Games Mobile Match 3 Turn based strategy Real time strategy
  40. 40. C#をサポート クライアントコール は同期アクションと 非同期コールバック をサポート 41 Game client integration
  41. 41. 参考ユースケース 簡単なゲームサーバロジック プレイヤーの確認 チート検出 ペアメッセージング スクリプトのハンドリング サーバの初期化時 プレイヤー受け入れ時 プレイヤーの接続/切断時 42 Realtime Scripts
  42. 42. 依存するライブラリを含めたス クリプトをzipでかためてパッ ケージング AWSコンソールにアップロード もしくはS3バケットを指定 43 Realtime Scripts
  43. 43. AWSとUnityを活用し マルチプレイヤーゲームの作り方 44
  44. 44. 45 ゲームの設計 対戦機能のあるテトリス を作成したい 相手に邪魔ブロックを 投げることができる
  45. 45. 46 Demo
  46. 46. サーバの準備とSDKの導入 ロビーの部分実装 部屋の作成/加入/検索 ゲームの部分実装 ゲーム準備OK/ゲーム開始 盤面の情報を共有 1行削除したら、相手にランダムブロック47 マルチプレイ対戦機能を実装するために
  47. 47. サーバの準備とSDKの導入 ロビーの部分実装 部屋の作成/加入/検索 ゲームの部分実装 ゲーム準備OK/ゲーム開始 盤面の情報を共有 1行削除したら、相手にランダムブロック48 マルチプレイに改装するため
  48. 48. GameLift Realtime Server Setup 49 Server scriptsを GameLiftにアップロード する サーバの数とスペック を決めて、起動する その他サーバの設定
  49. 49. Unity側の準備 50 公式サイトからAWS .NET SDKとGamelift Realtime Client SDK2つをダウンロードする パッケージをビルド、/Pluginsに追加する Unity2018.1.x と.Net4.5以上の必要がある
  50. 50. サーバの準備とSDKの導入 ロビーの部分実装 部屋の作成/加入/検索 ゲームの部分実装 ゲーム準備OK/ゲーム開始 盤面の情報を共有 1行削除したら、相手にランダムブロック51 マルチプレイに改装するため
  51. 51. 52 部屋の作成/加入/検索
  52. 52. 部屋の作成 53
  53. 53. 部屋作成の裏どのように動いている 54
  54. 54. 部屋の加入 55
  55. 55. 部屋加入の裏どのように動いている 56
  56. 56. 部屋の検索 57
  57. 57. サーバの準備とSDKの導入 ロビーの部分実装 部屋の作成/加入/検索 ゲームの部分実装 ゲーム準備OK/ゲーム開始 盤面の情報を共有 1行削除したら、相手にランダムブロック58 マルチプレイに改装するため
  58. 58. 59 ゲーム準備OK/ゲーム開始
  59. 59. コネクションを作る クライアントからOKを送信 サーバからゲーム開始をクライエントに送る クライエントから受信し、関連動作を行う 60 ゲーム準備OK/ゲーム開始のプロセス
  60. 60. TCPとUDP両方通信可能 61 コネクションを作成 クライアント Realtime Server 他のセッションの管理 RTMessage 通信 GameLift Service
  61. 61. RTMessageの構造(Protobufを利用して送信) opcode payload: targetGroup targetPlayer deliveryIntent TCP/UDP) 62 RTMessageの構造
  62. 62. 63 サンプルテトリスのopcode定義
  63. 63. 64 クライエントからOKを送信 クライアント ゲームサーバ
  64. 64. 65 サーバからゲーム開始をクライエントに送る クライアント ゲームサーバ
  65. 65. 66 サーバからデータ受信 一部APIはMainThreadで動かす必要があります
  66. 66. サーバの準備とSDKの導入 ロビーの部分実装 部屋の作成/加入/検索 ゲームの部分実装 ゲーム準備OK/ゲーム開始 盤面の情報を共有 1行削除したら、相手にランダムブロック67 マルチプレイに改装するため
  67. 67. 68 LogicとViewを分離する 疎接合なモジュール設計、仕様変更でも柔軟に対応できる マルチプレイ改造するための工数を最小化 違うフレームレイトで情報同期することが可能 盤面情報キャプチャ Viewerにセット
  68. 68. 69 LogicとViewを分離する GridManager.cs:テトリス盤面の情報を記録する
  69. 69. 70 LogicとViewを分離する Viewer.cs:情報された情報を表示する
  70. 70. 71 LogicとViewを分離する 送信側 受信側 同じロジックで対応できる
  71. 71. サーバの準備とSDKの導入 ロビーの部分実装 部屋の作成/加入/検索 ゲームの部分実装 ゲーム準備OK/ゲーム開始 盤面の情報を共有 1行削除したら、相手にランダムブロック72 マルチプレイに改装するため
  72. 72. 73 サーバロジック追加(相手にランダムブロック) opCodeごとにロジック追加 定期的に更新する・ロジックをバレたくない
  73. 73. SDKを利用し、数行のコードだけで、セッションとマ ッチングの管理ができる 通信フレームワークが定義されているので、ゲーム ロジックを専念できる わずかなコストで数百万のプレイヤーにスケーリン グできる 74 UnityでAmazon GameLift利用するメリット
  74. 74. AWSとUnityと連携する際のTips 75
  75. 75. GameLift Realtime Serverはローカルのデバッグができない ので、一番楽かつ安い選択はスポットインスタンス。c4.large の場合月当たり約8ドルぐらい。 同時接続設定された場合、ゲームセッションのクローズは GameLift Server側で管理されないと、リソース開放されない ため、新規接続できなくなります 76 GameLift 開発経験 環境配置 参考:https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/fleets-multiprocess.html
  76. 76. GameLiftの通信エラーは通常400エラーとして返して、具 体的なエラーはInnerExceptionにある. Unityを利用の場 合、Debug.LogExceptionよりLogErrorのほうが見やすい 77 GameLift 開発経験 クライエントログ FleetIdを指定しない場合: LogError: At least one of fleetId or aliasId must be specified LogException: The remote server returned an error: (400) Bad Request
  77. 77. 78 GameLift 開発経験 サーバログ セッション終了後、コンソールからダウンロードするこ とが可能です。直接サーバにSSHでログインして確認 することもできます
  78. 78. 基本の通信はTCPですが、メッセージ配信はデフォルトで UDP に設定されています。 UDPポートを動的に探すことが可能ですが、プラットフォームごと に探す方法が違います。UDP利用できない場合、フォールバック として TCP を使用して送信されます。 ネットワークのコールバックはMainThreadではないので、一部 のAPIコールはMainThreadに戻す必要があります。 79 GameLift開発経験 通信
  79. 79. 最後に 80
  80. 80. AWS上でゲームの構成相談 Amazon GameLiftの利用相談 マルチプレイゲーム価格試算や見積もり なんでも相談してください 81 相談ウェルカム
  81. 81. Thank You 82

×