質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Unreal Engine

Unreal Engineは、Epic Games社によって開発されたゲームエンジンです。高レベルの移植性を持っており、様々なプラットフォームのゲーム開発が可能。GitHubアカウントを登録すれば無料でダウンロードできます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

Q&A

解決済

2回答

17684閲覧

UE4でPUBGのようなゲームを作りたいのですがどういった技術が必要ですか?

mello

総合スコア53

Unreal Engine

Unreal Engineは、Epic Games社によって開発されたゲームエンジンです。高レベルの移植性を持っており、様々なプラットフォームのゲーム開発が可能。GitHubアカウントを登録すれば無料でダウンロードできます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

0グッド

4クリップ

投稿2017/10/25 12:52

PUBGのシステムをオマージュした作品を作りたいと思っており、
その為のモチベーションはかなり高く、2ヵ月前から、参考書を購入してUE4を独学して、ちょっとしたミニゲーム程度なら作れるようになったのですが、
PUBGを作る為に必要な技術の核心に迫った回答を得るべく、
本日、昼間にUE4に詳しい人に聞きに行ったら「クライアントのほかにサーバーの知識が必要」と言われて、掘り下げて聞いても具体性に欠ける回答しか得られず、
結局『どういう技術が必要でどういう勉強法を取るのが効率的か』という肝心な事は聞けずじまいでした。

サーバーの知識といっても多肢に渡ると思います。
サーバーは、AMAZONのクラウドサービスを利用するのが良いというように聞きましたが、
それは、正しい判断でしょうか?

最終的な目標としては賢者になる事でもなんでもなく、
PUBGと同じようなゲームを作る事なので、
その為には、どういう技術を身につければよいか、またどういう勉強法を取ればよいか、
何かいいアドバイスを頂けませんか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

PUBGというゲームを知らなかったのでちょっと概要とかを見てみました。

まず確認したいのですが、あなたが作りたいのはどの要素ですか?

  • 100人くらいがわちゃわちゃ戦うTPS
  • それなりのグラフィックスできれいなTPS
  • 生き残りをかけたTPS

まず要素的に上から順に難しいです。3vs3程度であれば生半可な知識でもそれなりに動ける通信対戦ゲームは作れますが、100人ともなると様々な要因がひっかかってきます。まずそれだけ膨大な人数の「コンマ数秒」の遅れすら許されない同期通信を捌ける、という条件が必要になります。
それなりのグラフィックスできれいなものにするにはモデルデータ等が必要になります。一番楽なのはそこらのMMDのモデルを組み込むことですが、単純に組み込むとそれが100人も居れば描画負荷は凄まじいことになります。とてもじゃないですが家庭用PCでは処理速度が追いつきません。
ただ単に何人かで集まって、バトルロイヤルなTPSが作りたいだけならそれらのハードルは下がります。

ではぱっと思いつく、ハードル高めな必要な技術について見てみましょう。

TCPやUDPといったソケット通信技術

TCP、UDPという通信プロトコルがあります。これはHTTP等の「通信したら返事が来る」といった一方的なプロトコルと違い、「通信しっぱなしでお互いがいつでも相手にデータを投げられる」という仕組みとなります。TCPは「投げたデータが確実に届くが、少し遅い」、UDPは「投げたデータが届くとは限らないがとても速い」通信です。これらを組み合わせて利用して、例えばプレイヤーの動きや誰がどこで誰にダメージを与えたか、などをサーバに送信、サーバ側はそれを集計して誰が倒れた等を全員に伝える、という流れになります。

多少のラグを吸収し、撃った側、撃たれた側の納得できる仕様を考える力

愚直に移動や弾丸の軌道を通信でやりとりしてサーバで当たり判定、ということをやるとおそらくいつまでたってもお互いに弾が当たりません。なぜなら撃った側の見ている世界、撃たれた側の見ている世界は必ずコンマ数秒のズレがあるからです。ということは撃った側、撃たれた側のどちらを優先するか?という考えになります。撃った側の見た世界を優先すると、撃たれた側は「壁に隠れたのに蜂の巣にされた!クソゲー!」となり、撃たれた側を優先すると「撃っても撃ってもダメージ入らん!クソゲー!」となります。これをお互いストレスを感じない程度に差を吸収できる仕様を考える力が必要です。

100人という膨大な人数の非同期な操作を統括して処理するサーバ処理

少人数のゲームであれば、多少力技の処理をサーバに書いても処理が間に合いますが、100人のデータを瞬時に計算して、100人全員に適切な情報を返さなければならないとなると、まず仕様の時点で軽量化を図る必要があります。サーバ側を軽量なアルゴリズムで仕様を満たすには、ある程度の「どんぶり勘定」であったり、「余分の削除」であったり、「ある程度クライアントに任せる」等も織り込む必要があります。これらのさじ加減は長年ゲーム企業が培った技術であり、専用の技術書が1万オーバーで売っているような世界です。

モデルのLOD(Level Of Detail)管理

きれいなモデルをそのまま動かしていると猛烈に処理速度が落ちます。遠いキャラのモデルはディティールを下げる、立ち止まっているときだけきれいに見せる、などの「ディティールの動的な変化」を実装する必要があります。


とりあえず私の知識で思いつくのはこのくらいです。

投稿2017/10/26 00:37

masaya_ohashi

総合スコア9210

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mello

2017/10/26 09:01 編集

回答ありがとうございます。 私が作ろうとしているゲームで、 『PUBGと同じシステム』の部分は・・・ ・100人のユーザーが約10平方kmのフィールド上に大体均等に散布されて戦う ・戦闘前の各ユーザーの違いはニックネームとアバターのみ。全員がフェアな状態で戦う ・フィールド上には毎回ランダムで装備やアイテムがバラまかれる ・時間の進行と共に、フィールド上の活動可能範囲が縮小していく(これにより殺し合いで少なくなったユーザー同士が必然的に同じ場所で戦うことになる) ・TPS / FPS は任意で切替可能 ・装備品はアバターとは別に外見に反映される ざっとこんな物です。 『サーバーが処理する静的な情報』 ・ユーザーネーム ・アバター (これぐらい?) 『サーバーが処理する動的な情報』 ・100人のユーザーの動的パラメータ(生死・HP・残弾数・装備耐久値など) ・フィールド上のアイテム⇔ユーザーが所有するアイテム / ユーザーの現在の装備 ・100人のユーザーの位置・向き・モーション 『ヒットの同期提案』 「ヒット判定は攻撃側で行い、ダメージ計算は被撃側で行い、値の反映をサーバーで行う」 といったP2Pとサーバー方式を組み合わせた方式でいこうと思うのですが、以下のようなフローチャートは現実的に実装できそうでしょうか? ①クライアントAさんサイド 『クライアントBさんに対して弾を撃った』 ー 外れた  → 何も送信しない ー 当たった → クライアントBさんへ送信 [TCP]『当てた部位・使用武器・距離』 ②クライアントBさんサイド クライアントAさんから受信した情報(部位・武器・距離)と自分が装備している防具の情報を基にダメージ計算を行い、結果をサーバーに送信する。 ③サーバーサイド クライアントBさんから受け取った結果(HP・防具耐久値・生死など)の情報を更新し、他のユーザーに TCP で返す処理を行う。 以上のようなやり取りで問題なさそうでしょうか? === ほかにも幾つか質問があります。 1つ目は、 TCPとUDPはどういう基準で分ければ良いでしょうか? 高速化の為にUDPも織り交ぜたいところなのですが、一つとして確実性に欠けて良い情報がないような気がしています。 2つ目は、 100人1ゲームを幾つも用意したり、国別でサーバーを分けたりといった、恐らくサーバーサイドの処理になるであろう部分は、どういう風に実装したらいいですか? サーバーの実装や運営をした事がないので、どういう言語を使うのかとか、どういうエンジンで動作するのかとか殆どわかっていません。
masaya_ohashi

2017/10/26 09:19 編集

ヒットの同期提案はそれで概ね成立すると思います。まずはそれで作ってみて、問題が起きたらそこの仕組みを変える、というスタイルのほうがよいと思います。 TCP、UDPの使い分けは例えば移動に関して「1秒ごとに確実にTCPで座標を送り、それ以外はUDPでできるだけリアルタイムな座標を送る」といった使い分けをしたりします。 サーバの負荷分散は国別でサーバを分けるほど盛況になったときに考えるべきかと思います。最初からスケーラビリティを考えておくことは重要ですが、個人レベルで作るもので世界中から猛烈なアクセスが来ることを考えるのは取らぬ狸の皮算用です。というか、私もさすがにそこまで大規模なことをやったことがないので、アドバイスも難しいです。AWSで考えれば「人が混んできたらCPUパワーが上がる」ような組み方をすれば、小規模なアクセスであればそれだけで捌けるかと思います。
mello

2017/10/27 07:08

返信ありがとうございます。 言われてみれば、その使い分けに思い当たる挙動は既成のオンラインFPSでも見られたような気がします。 PUBGはレトロゲームのボンバーマンにおける対戦が終盤に差し掛かるにつれ、ステージが端から収縮していくというシステムを現代的な形で転用し、再燃させ大流行させた、厳密に言えばパクリですが、開拓的で未完成のジャンルだと思っています。 現状1つオリジナルの実質パクリのようなFortniteというタイトルを知っていますが、 作品としてはやや上位互換ですが決定打に欠ける為、その勢いはオリジナルの足元にも及びません。 私が思うに何か決定打となるエッセンスを足した上で、 上位互換+α の物を出せば、まだ参入の余地があると思っています。 そのタイミングも恐らく今しかないので、趣味の範疇ではなく、本気で仕事にするつもりでスケーラビリティも考えており、開発に向けて急いで技術を身に着けようと思っているのですが、 今の話を聞くと、通信の最適化の部分で躓いて、 参入のタイミングを逃す恐れがありそうな気がしています。 こういうのを学習する時に最も効率的な手段はなんでしょうか? ちなみにUE4を勉強する時にC++も一緒に勉強したので、少しコードを読める程度の知識はあります。
masaya_ohashi

2017/10/27 15:41

プロトタイピングで早々に動くものを作り、そこからブラッシュアップするのが近道かつ確実に完成へ近付くものかと思います。「改善しなければいけない」という環境に追い込むことが「嫌でも技術がつく」ことに繋がります。ただ漠然と勉強するより、よほど効果的かと思います。私が技術を身に着けたのも漠然と本を選んで読んだからではなく「必要に迫られたので学習した」結果です。 とりあえずいきなり100人でなく、数人で動かせるものを作り、そこから改善していく形でやるのが一番実践的かつブートキャンプ的な早さで学習できるかと思います。100人でも2人でも、TCP等の通信を使うことには変わりなく、あとはそこからのアルゴリズムや仕様が変わるだけです。
mello

2017/10/29 18:07

なるほど…、わかりました。 とりあえずは動く物を作ってみようと思います。
guest

0

ざっくりというと、ゲーム全体としては3D技術を理解するための数学の基礎及び応用知識、ゲームフレームワーク基盤で3DのFPSを実現する事(C++やC#)と、それに表示する3Dモデル、テクスチャ等のグラフィック素材の調達と、ネットワーク対戦ゲームとしてリアルタイム通信を行うサーバーが必要になります。
製品として真面目に作ると何千万円、何億円という予算が必要ですが、趣味やインディーズゲームとしてであれば出来上がりのものをうまく組み合わせることでバトルロワイヤル的な乱戦ゲームはそこそこのものが実現できると思います。
Photonというネットワークゲーム用のサーバーサービスが定期的にハンズオンを開催しているので、その他UnityやUE4等のセミナーや勉強会と合わせて参加してみると感覚がつかめると思います。
Photon
AmazonのAWSも最近はゲームサーバーやゲーム用のフレームワークにも力を入れているので、コストや作りやすさを一通り比較してみると良いかと思います。

投稿2017/10/25 13:15

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問