PUBGライクなゲームを
Unityだけで早く確実に作る方法
〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
(株)モノビット
取締役CTO 中嶋謙互
2018年3月
ゲーム開発の大原則
いつでもプレイできる状態を保って
開発を続けるべし。
「プレイできる状態」とは?
• 100人用ゲームだけど、最初は1人用で作ります。
(だから、マルチプレイはできません)
• 最初からマルチプレイできる状態で作るけど、Unityを何個も立ち上げたり
するのがめんどくさいので、だいたい1人でプレイしてるだけ。
(気付いてない未実装部分がじわじわたまっていく)
• NPCを100体出して、1人プレイでも襲撃されるようにしました。
(でも、ネットワークは一切使ってない。。正直いって後がこわい)
「プレイできる状態」とは?
• 開発の最初から、ゲームサーバーに100クライアントが接続して、対戦し
ている状態を作って実装を続けれるのが理想
• 本番用コードと構造がまったく同じ状態
今日は、実際にこの手順で作る方法を解説し、
それがどれぐらいめんどくさ(くな)いのかを紹介します。
実際に作って説明します
「爆弾バトルロイヤルゲーム」
爆弾バトル サーバー接続前
この立派なカプセルがあなた自身なのです!
爆弾バトル サーバー接続後
爆弾バトル 俯瞰視点
爆弾バトル 複数起動PvP
ゲーム内容 : 爆弾をなげるだけ
クリックして爆弾を投げて、敵を吹き飛ばすだけ!
ダメージ判定はあるけど勝敗判定とかはありません
爆弾
爆風
ゲーム内容 : 自分以外はすべて敵
自分の爆風:オレンジで表示
自分以外の爆風:青で表示
自分は白カプセル
自分以外は赤カプセル
1 動作確認手順
1.ゲームサーバー(mrs_room)を起動する
2.Unityを起動する
3. 1人目はStart Room Client Ownerボタンを押す
(2人目以降は Join a Room ボタンを押す)
4.Add 1 Dummy Playerボタンを押す
(Add 100 Dummy Playerボタンで100人を一気に追加する)
デモ
• 出力した実行形式を使用
ネットワーク構成
LocalPlayer
mrs_room
サーバー
Unity (ダミークライアントあり)
RemotePlayer
RemotePlayer
DummyPlayer
・・・
SampleBattleClient
MrsConnection
DummyPlayer
MrsConnection
MrsConnection
・・・
更新
TCP
LocalPlayer
Unity (ダミークライアントなし)
SampleBattleClient
MrsConnection
更新
更新
RemotePlayer
RemotePlayer
・・・
更新
Input
Input
これが
ダミープレイヤー
本番用のコード構成とまったく同じ
LocalPlayer
mrs_room
サーバー
Unity (ダミークライアントあり)
RemotePlayer
RemotePlayer
DummyPlayer
・・・
SampleBattleClient
MrsConnection
DummyPlayer
MrsConnection
MrsConnection
・・・
更新
TCP
LocalPlayer
Unity (ダミークライアントなし)
SampleBattleClient
MrsConnection
更新
更新
RemotePlayer
RemotePlayer
・・・
更新
Input
Input
これが
ダミープレイヤー
mrs_roomサーバーの基本コマンド
• CREATE : データリレーの単位となる「部屋」を新規作成
• JOIN : 部屋に参加する
• LEAVE : 部屋から離脱する(ゲーム終了)
• SET_OWNER : 部屋の所有者であることを宣言
• BROADCAST : 部屋にいる全員に送信
• OWNERCAST : 部屋の所有者のみに送信
• MULTICAST : 部屋にいる複数人に送信
• NEARCAST : 部屋にいる「近い人」だけに送信
• UNICAST : 部屋にいる一人のみに送信
UNICASTが重要なのであとでくわしく解説
爆弾バトルゲームの独自コマンド
• PING : 通信の遅延時間を測定
• PING(UInt32 t) tは、Time.timeを1000倍した値
• SYNC_POS : キャラクターの位置を同期する
• SYNC_POS(Int32 x, Int32 z) x,zは位置の座標を1000倍した値
• SHOOT : 爆弾を投げる
• SHOOT(Int32 vx, Int32 vy, Int32 vz ) vx,vy,vzは爆弾の速度を1000倍した値
ダミープレイヤーなしの時の動作
• mrs_roomにTCP接続
• CREATE(player_id), SET_OWNER(player_id)を発行
• 1秒に5回、SYNC_POSをNEARCAST
• 爆弾を投げるときは SHOOTをNEARCAST
TCP サーバアドレス サーバポート プレイヤーID
CREATE
JOIN
NEARCASTの範囲
範囲外に出たら同期しなくなり、
10秒間同期しなかったら消える
DummyPlayerの動作
1.Start()で mrs_roomサーバーにTCP接続
2.座標を-300~300でランダムに初期化
3.プレイヤーID17番のキャラを特別扱いし、17番からのSYNC_POSが来たらそ
の位置を記憶する。
4.17番キャラを追いかけるものと、ランダムにうろうろするものが半数づつ
5.数秒に1回爆弾を投げる
6.NEARCAST(SYNC_POS), NEARCAST(SHOOT)は通常プレイヤーと同じように送る
同期用座標の反映方法
• 移動目標地点を更新するだけ。
• ただし20より離れてたらワープする
100プレイヤー状態で、通信量と遅延を常時測定
バイト数/秒受信レコード数/秒 PING値
NEARCASTを使う場合、
毎秒143レコードで
4214バイト=33Kbps
BROADCASTを使う場合、
毎秒504レコードで
15048バイト=120Kbps
送信モード切り替え
良好
採算性がかなり悪い
ゲームサーバーの採算性
• AWSなどでは、CPUは安く、通信費用は高い。
• 1プレイヤー(CCU)あたり、だいたい100Kbpsを越えないよ
うにできると採算性の問題が起きにくい。
• ダミークライアントを使えば、常に100人が接続している
状態で通信量と遅延の程度を見ながら、画面の動きを同
時に確認できる。
BROADCASTとNEARCASTの使い分け
• mrs_roomが自動的にBROADCASTするもの
• 部屋の状態変化(退出や途中参加)
• BROADCAST送信が向いているもの
• 高速移動するキャラや、乗り物に乗っているキャラの同期
• 射程が長い武器の動き
• 地形や建造物の破壊や変更、天候変化など
• フィールドに落ちているアイテムの状態変化
• モブの発生や削除
• 時刻の同期
• NEARCAST が向いているもの
• キャラクターやモブの位置変化
• キャラクターやモブの頻繁に発生するタイプのアクション(ジャンプとか)
• エフェクトやサウンド通知
CCU=100でのMRSサーバー負荷
• CCU=100 時点でのサーバCPU消費量は計測できない範囲におさまる
。(0.5~1%)
• NEARCASTでもBROADCASTでもCPU負荷に大きな違いはない
• MRSサーバーの性能は マシンあたり2〜3GBps以上、50万パケット以
上 (ネットワークスイッチがまずボトルネックになる)
ゲーム内容の作り込み
• たとえば、爆弾バトルに「伏せる」という動きを追加したい場合
• まずLocalPlayerに動きを追加して、操作ができるようにする
• LIE_DOWNというコマンドを追加、動作時にNEARCASTする
• DummyPlayerが数秒に1回LIE_DOWNを送信するようにする
• LIE_DOWNを受信したらRemotePlayerが伏せる反応を追加する
サーバーコードをいじる必要はない。
Unityのみで作業は完結。
ダミークライアントの作り込み
• もっと賢くすることはできる
• 影に隠れたり
• ダミクラ同士で襲撃したり
• 経路探索を行う
• etc..
• ただしCPU負荷は増えていく
100人以上について
• モノビットエンジンの性能上は200〜300人でも問題はな
かった。
• Unityの描画・ダミークライアントのロジック負荷がだん
だん上がっていくので、限界はある
結論
• MRSを用いれば、
• PUBGライクな100人バトルロイヤルゲームにおいて
• Unity内部に100個の実際に通信するダミークライアントを
追加して実際に活動させることで
• 本番コードと完全に同じ構成における通信負荷と遅延を
常時監視しながら、開発作業を進行できる。
モノビットのミドルウェア製品
• MRS “Monobit Revolution Server”
• UDP/RUDP/TCP/WebSocketに対応した全プラットフォーム向け通信ミドルウェア
• http://www.monobitengine.com/mrs/
• MUN “Monobit Unity Network”
• Unity向けの導入が非常に簡単なMRSベースのミドルウェア
• http://www.monobitengine.com/mun/
• MRSクラスタ
• MRSサーバー群のクラウド・オンプレにおける運用を支援する製品
爆弾バトルはこれを使っています
【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜

More Related Content

PPTX
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -
PDF
UE4でマルチプレイヤーゲームを作ろう
PDF
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
PDF
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
PDF
個人製作インディーゲーム”ジラフとアンニカ” のUE4 制作事例紹介 | UNREAL FEST EXTREME 2020 WINTER
PPTX
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
PDF
猫でも分かる UE4の新しいサンプル「Action RPG」について
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -
UE4でマルチプレイヤーゲームを作ろう
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
個人製作インディーゲーム”ジラフとアンニカ” のUE4 制作事例紹介 | UNREAL FEST EXTREME 2020 WINTER
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
猫でも分かる UE4の新しいサンプル「Action RPG」について

What's hot (20)

PPTX
UE4のためのより良いゲーム設計を理解しよう!
PDF
【Unity道場】VectorGraphicsで作る エモい表現
PDF
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
PDF
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
PDF
オンラインゲームの仕組みと工夫
PDF
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
PDF
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
PPTX
未来のプログラミング技術をUnityで -UniRx-
PDF
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
PDF
なぜなにFProperty - 対応方法と改善点 -
PDF
UE4とUnrealC++について
PPTX
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
PPTX
ブループリントマニアックス
PDF
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
PDF
Unityでオニオンアーキテクチャ
PDF
UniRx完全に理解した
PDF
MagicOnion入門
PDF
UE4における大規模レベル実装ワークフローとブループリント活用事例
PPTX
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
PPTX
UE4アセットリダクション手法紹介
UE4のためのより良いゲーム設計を理解しよう!
【Unity道場】VectorGraphicsで作る エモい表現
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
オンラインゲームの仕組みと工夫
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
未来のプログラミング技術をUnityで -UniRx-
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
なぜなにFProperty - 対応方法と改善点 -
UE4とUnrealC++について
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
ブループリントマニアックス
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
Unityでオニオンアーキテクチャ
UniRx完全に理解した
MagicOnion入門
UE4における大規模レベル実装ワークフローとブループリント活用事例
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
UE4アセットリダクション手法紹介
Ad

Similar to 【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜 (20)

PDF
Cedec2013 photon network engine
PDF
iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
PPTX
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
PPTX
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】
PPTX
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】
PDF
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
PDF
GTMF2017 モノビットセッション資料(2)
PDF
GTMF2017 ゲーム&VR向けリアルタイム通信エンジンの新しい選択肢!2 株式会社モノビット
PDF
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
PDF
誰でも今日から実践できるUnity x PlayFab(Demoパート)
PPTX
PhotonCloudで一ヶ月ゲーム作った話
PDF
Unityでオンラインゲーム作った話
PPTX
【Unite 2017 Tokyo】マルチプレイゲームのグローバル展開事例(BNE様)と完全同期を実現するPhoton TrueSync のご紹介
PDF
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
PPTX
ゲーム特化の BaaS! Unity + PlayFab 入門!
PDF
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
PPTX
GMOアプリクラウドではじめる Photon Server v4 (2016/4/20 発表資料)
PPTX
Unity勉強会ハンズオン
PDF
【Unite Tokyo 2019】Unity + PlayFab ではじめる新しいゲーム運用 ~LiveOpsの始め方~
Cedec2013 photon network engine
iPhoneでリアルタイムマルチプレイを実現!Photon Network Engine
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編・前編】
Unityで Photonを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【応用編】
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
GTMF2017 モノビットセッション資料(2)
GTMF2017 ゲーム&VR向けリアルタイム通信エンジンの新しい選択肢!2 株式会社モノビット
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
誰でも今日から実践できるUnity x PlayFab(Demoパート)
PhotonCloudで一ヶ月ゲーム作った話
Unityでオンラインゲーム作った話
【Unite 2017 Tokyo】マルチプレイゲームのグローバル展開事例(BNE様)と完全同期を実現するPhoton TrueSync のご紹介
【Unite Tokyo 2019】「禍つヴァールハイト」最大100人同時プレイ!モバイルオンラインゲームの実装テクニック
ゲーム特化の BaaS! Unity + PlayFab 入門!
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
GMOアプリクラウドではじめる Photon Server v4 (2016/4/20 発表資料)
Unity勉強会ハンズオン
【Unite Tokyo 2019】Unity + PlayFab ではじめる新しいゲーム運用 ~LiveOpsの始め方~
Ad

More from モノビット エンジン (20)

PDF
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
PDF
【CEDEC2019 】5G時代に対応した『モノビットエンジン5G』を初公開! HoloLens対応した通信クラウド最新情報も!
PDF
Linux も動く Microsoft Azure    HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採...
PDF
【GCC2019】モノビットエンジンがついにクラウド化!しかし、インフラでまさかのAzureを利用!?本当に大丈夫なの?
PDF
Unity道場京都スペシャル3 モノビットエンジンでマルチプレイゲーム開発 ~はじめの一歩~
PDF
【CEDEC2018】800万ダウンロードを達成した共闘ことばRPG 『コトダマン』でのモノビットエンジン採用実例と最新情報 ②
PDF
【CEDEC2018】800万ダウンロードを達成した共闘ことばRPG 『コトダマン』でのモノビットエンジン採用実例と最新情報 ②
PPTX
【CEDEC2018】800万ダウンロードを達成した共闘ことばRPG 『コトダマン』でのモノビットエンジン採用実例と最新情報 ①
PDF
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報
PDF
VR/AR分野におけるモノビットエンジン活用事例と新スタンドアロンVRHMD(どっかんナゴヤ’18)
PDF
八百万クエストにおける MUN採用事例 MUN使用環境における課題と対策
PDF
リアルタイムゲームサーバーの ベンチマークをとる方法
PDF
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
PDF
【モノビットエンジン勉強会inサイバーコネクトツー】 第二部「MRS/MUN 10万接続サーバ構成実例」
PDF
【モノビットエンジン勉強会inサイバーコネクトツー】 第一部「モノビットエンジンVer2.0シリーズ概要」
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
PDF
【CEDEC2017】新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!
PPTX
GTMF2017 モノビットセッション資料(1)
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
【CEDEC2019 】5G時代に対応した『モノビットエンジン5G』を初公開! HoloLens対応した通信クラウド最新情報も!
Linux も動く Microsoft Azure    HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採...
【GCC2019】モノビットエンジンがついにクラウド化!しかし、インフラでまさかのAzureを利用!?本当に大丈夫なの?
Unity道場京都スペシャル3 モノビットエンジンでマルチプレイゲーム開発 ~はじめの一歩~
【CEDEC2018】800万ダウンロードを達成した共闘ことばRPG 『コトダマン』でのモノビットエンジン採用実例と最新情報 ②
【CEDEC2018】800万ダウンロードを達成した共闘ことばRPG 『コトダマン』でのモノビットエンジン採用実例と最新情報 ②
【CEDEC2018】800万ダウンロードを達成した共闘ことばRPG 『コトダマン』でのモノビットエンジン採用実例と最新情報 ①
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報
VR/AR分野におけるモノビットエンジン活用事例と新スタンドアロンVRHMD(どっかんナゴヤ’18)
八百万クエストにおける MUN採用事例 MUN使用環境における課題と対策
リアルタイムゲームサーバーの ベンチマークをとる方法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
【モノビットエンジン勉強会inサイバーコネクトツー】 第二部「MRS/MUN 10万接続サーバ構成実例」
【モノビットエンジン勉強会inサイバーコネクトツー】 第一部「モノビットエンジンVer2.0シリーズ概要」
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
【CEDEC2017】新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!
GTMF2017 モノビットセッション資料(1)

【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜