C++コードはいらない!
UE4で作るお手軽マルチプレイ
ネットワークゲームについて
Unreal Fest 2015 Yokohama
フリーランスゲームクリエイター
コミュニティサポーター
中村 匡彦
自己紹介
名前 : 中村 匡彦
Twitterでは『@aizen76』でやっています。
8年ほどゲーム会社でゲームプログラマーやってました。
3DアクションゲームやMMORPGなど幅広く携わってきました。
アンリアルフェスでも毎回喋らせてもらっ...
今回のテーマは…
ネットワークとマルチプレイヤー!
UE4のネットワークについて
Server
Client
ClientClient
クライアント・サーバーモデルを採用。
ただしUE4はエンジンがクライアント、
サーバー両方をこなせる仕組みを持つ。
UE4のネットワークについて
最初からエンジンコアの部分でネットワークに
対応する設計になっているので、シングルプレイヤーから
マルチプレイヤーにするのも比較的簡単。
更にC++コードを書かなくてもブループリントのみで、
マルチプレイヤーゲーム...
サーバーについて
ネットワークにおける最高権限を持ち、
ゲームプレイフローを管理します。
クライアントはサーバーにログインしてから、
あらゆる情報に従う必要があります。
ListenサーバーモードとDedicatedサーバーモードがあり。
どち...
Listenサーバーモード
クライアントと同じようにゲームプレイを行なう事が可能。
サーバー機能を有しつつもクライアントのように動作する。
見た目にも動作がわかりやすく、テストプレイもしやすい。
特に問題がなければListenサーバーモードで。
Dedicatedサーバーモード
いわゆる完全なサーバー専用モード。
クライアントのような画面はなく、コマンドプロンプトの
ような真っ黒い画面上でも動作する。
最低限のリソースで動作し、クライアントを処理するのに
フルスペックで動作するので比較...
クライアントについて
サーバーにログインして、各々の見た目の部分を担当する。
ゲームロジックの処理はサーバー側にお任せ。
ただし、自分がコントロールするPlayerControllerの情報を
逐次サーバー側へと送信してあげる必要あり。
これを...
サーバーへのログイン(その1)
サーバー側でレベルを起動する際にオプションを渡すと、
Listenモードで起動するので、そこにクライアントは
IPアドレスを指定してログインする。
LANを使っての場合は、LANオプションを指定。
WANの場合は...
サーバーへのログイン(その1)
クライアントのログインListenサーバーを実行
サーバーへのログイン(その2)
UE4に用意されている『オンラインサブシステム』を使う。
これはプラットフォーム(Steam等)毎に用意されている、
オンライン機能をUE4用にラッピングして使えるようなっている。
セッション(ルームとも言う)作...
サーバーへのログイン(その2)
Play In Editorの場合
レベルを実行した時点で複数プレイヤーを
ログインさせた状態でいきなり実行可能!
実行時にサーバーとクライアントを
それぞれ自動に振り分け。
Playボタン横から選択可能なメニューで
プレイヤー数を設定しておき...
1つのPC上で即マルチプレイ!
レプリケーションについて
レプリケーションとは?
サーバーがクライアントに対してネットワークを通じて、
情報をレプリケート(複製)する事によって、
クライアント間で差異が生じないように同期する。
これをネットワークレプリケーションと呼び、
UE4では何をレプリケートする...
アクターのレプリケーション
基本はアクターに対してレプリケートを行ない、
多くのアクターではデフォルトでレプリケート設定になっている。
レプリケートがオンになっていると
自動的にアクターの動き等が
同期されるようになっている。
レプリケート権限
レプリケーションはサーバーのみが行なう事ができます。
クライアントはサーバーに対してレプリケーションして
欲しい情報を送信する必要あり。
つまりサーバーとクライアントか判断してロジックを
変更して動かしてあげる必要がある。
Switch Has Authorityマクロ
サーバーと
クライアントを
判断するマクロ。
ロジック分岐の際に
多用します。
アクター所有権限
基本的にアクターはサーバーでスポーンしますが、
例外的にクライアント上でアクターをスポーンした場合、
クライアントがアクターの所有権を持つ。
クライアント上のアクターはレプリケートされないので、
ロジックやダイナミクスを含むア...
変数のレプリケーション
ブループリント上で変数を作った場合には、
プロパティの設定ひとつでレプリケーション可能。
単純なレプリケーションの他に、
変数値が変更された場合のイベント通知も可能。
この場合にはサーバーとクライアント双方に送信される。
Replicated
最も単純な変数のレプリケーション。
設定をすると、変数値の変更は
自動的にサーバーからクライアントへ
レプリケートされる。
クライアント上の変数値は一度
サーバーに送信してからレプリケートする。
RepNotify
Replicatedと同様の設定方法で使用可能。
選択すると自動的に『OnRep_<変数名>』
という関数が自動的に追加。
中身は自由に実装が可能で、該当名の変数値が変更される度に
この関数がイベントのように呼び出されるよう...
RPC(リモートプロシージャコール)
RPCとは?
ネットワークの先にある環境で関数やイベントを実行する事。
UE4では標準で3つの呼び出し方法が存在。
ブループリントではカスタムイベントを作成して使用する。
デフォルトでは『Not Replicated(複製なし)』
になっている...
Multicast
呼び出しをサーバーで行なうと
全てのクライアントで処理が実行。
最も一般的なRPCイベント。
(Server to Client)
クライアントで呼び出しても、
クライアント内でしか処理されない。
Run on Server
呼び出しをクライアントで行なうと
サーバー上で実行される。
ただしアクターの所有権が必要。
(Client to Server)
サーバー上で呼び出しても、
クライアント上へレプリケートしない。
Run on Owning Client
サーバーから呼び出した場合に、
アクター所有権のあるクライアント上
でのみ実行される特殊なRPCイベント。
(Server to Client)
クライアントで呼び出しても、
クライアント内でしか処理さ...
RPC使い分け
『Multicast』はサーバーから全てのクライアントで
同期する際に一番最も頻繁に使用する。
『Run on Server』はクライアントからサーバー上へ何かしら
情報を通知したい場合に使用し、変数値を同期させる
場合にも使用...
RPC使い分け
『Run on owning Client』は最も特殊で、
アクター所有権を自分で管理しておく必要あり。
つまり、サーバーはそのアクターを誰が所有しているのかを
理解しておく必要があり、特定クライアントに対してのみの
RPCイベ...
アクター所有権の確認
自分がそのアクターを所有しているのか確認する際には、
Pawnの場合には『Is Locally Controlled』を、
PlayerControllerは『Is Local Player Controller』を使用し...
Reliability (信頼性)
RPCには『Reliable』というプロパティがあり、
通信の信頼性を向上させる事が出来ます。
ただし、Reliableを設定すると通信帯域幅をより多く消耗し、
レイテンシーが大きくなる可能性があり、
リアル...
通信パフォーマンス最適化
『Net Cull Distance Squared』は、
アクターのレプリケーションが届く範囲を
設定し遠距離の不要な通信しなくなる。
『Net Update Frequency』は通信の更新頻度
を設定する事が可能...
マルチプレイヤー化 実演
マルチプレイヤー化
元々シングルプレイヤーなゲームを
マルチプレイヤーへとライブノーディングしていきます!
今回使用するのはFPテンプレートを少し改造したもの。
デフォルトではシングルプレイヤーですが、
簡単にマルチプレイヤーへと変化します!
マルチプレイヤー化
ゲームジャンルによっては、すぐにシングルプレイヤーを
マルチプレイヤーに出来る事がわかったと思います。
UE4はこれだけの事がブループリントのみでもいけます!
もちろんC++を使えばもっと奥深い事も可能です。
その他
ネットワークやオンライン周り
パッチやDLC
4.8からその機能自体は存在。
あまり情報はないですが、少しずつ資料が増量中。
DLCというよりもMODやUGCとして扱われているようです。
https://wiki.unrealengine.com/Modding:_Addi...
コミュニティでの実績
UE4のフォーラムでMMOを作るためのキットも
実際に販売されています。
MMO Starter Kit
https://forums.unrealengine.com/showthread.php?53208-
MMO-...
コミュニティでの実績
UE4をマスターサーバー化するプラグイン。
Master Server with Unreal Engine 4 Plugin
https://forums.unrealengine.com/showthread.php?...
コミュニティでの実績
HTTP通信をブループリントで実現するプラグイン。
VaRest
https://forums.unrealengine.com/showthread.php?13509-
Plugin-Http-s-REST-bluep...
コミュニティでの実績
日本でもプラグインを作って公開している人も!!
UE4でBlueprint上からHTTP通信を行うWebApiプラグインを公開しました
http://hogetatu.hatenablog.com/entry/2015/0...
コミュニティでの実績
日本ではTwitterプラグインを作っている人もいます!
Twitter4UE
http://blog.cnu.jp/2015/08/27/twitter-plugin-for-ue4/
Pull Requestも歓迎らし...
まとめ
UE4はネットワーク周りも相当充実しています。
面倒くさいRPC周りも設定をメニューからするだけ!
あまりにも簡単にネットワーク対応が出来るの驚き。
スマホであればHTTP通信さえ出来れば十分なゲームもあるはず。
さぁUE4使いの皆さん...
Upcoming SlideShare
Loading in...5
×

C++コードはいらない!UE4で作るお手軽マルチプレイ ネットワークゲームについて

141

Published on

UNREAL FEST 2015 YOKOHAMAで登壇した際に発表した内容のスライドです。UE4上でマルチプレイネットワークゲームを作るための入門的な内容となっております。

Published in: Engineering
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
141
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

C++コードはいらない!UE4で作るお手軽マルチプレイ ネットワークゲームについて

  1. 1. C++コードはいらない! UE4で作るお手軽マルチプレイ ネットワークゲームについて Unreal Fest 2015 Yokohama フリーランスゲームクリエイター コミュニティサポーター 中村 匡彦
  2. 2. 自己紹介 名前 : 中村 匡彦 Twitterでは『@aizen76』でやっています。 8年ほどゲーム会社でゲームプログラマーやってました。 3DアクションゲームやMMORPGなど幅広く携わってきました。 アンリアルフェスでも毎回喋らせてもらっています。 趣味もゲームを遊び、ゲーム制作しつつイラストを描いたり。
  3. 3. 今回のテーマは… ネットワークとマルチプレイヤー!
  4. 4. UE4のネットワークについて Server Client ClientClient クライアント・サーバーモデルを採用。 ただしUE4はエンジンがクライアント、 サーバー両方をこなせる仕組みを持つ。
  5. 5. UE4のネットワークについて 最初からエンジンコアの部分でネットワークに 対応する設計になっているので、シングルプレイヤーから マルチプレイヤーにするのも比較的簡単。 更にC++コードを書かなくてもブループリントのみで、 マルチプレイヤーゲームが作れるように配慮されています。
  6. 6. サーバーについて ネットワークにおける最高権限を持ち、 ゲームプレイフローを管理します。 クライアントはサーバーにログインしてから、 あらゆる情報に従う必要があります。 ListenサーバーモードとDedicatedサーバーモードがあり。 どちらの手段であっても役割自体は同じ。
  7. 7. Listenサーバーモード クライアントと同じようにゲームプレイを行なう事が可能。 サーバー機能を有しつつもクライアントのように動作する。 見た目にも動作がわかりやすく、テストプレイもしやすい。 特に問題がなければListenサーバーモードで。
  8. 8. Dedicatedサーバーモード いわゆる完全なサーバー専用モード。 クライアントのような画面はなく、コマンドプロンプトの ような真っ黒い画面上でも動作する。 最低限のリソースで動作し、クライアントを処理するのに フルスペックで動作するので比較的大規模なネットワークの マルチプレイヤー向けのモード。
  9. 9. クライアントについて サーバーにログインして、各々の見た目の部分を担当する。 ゲームロジックの処理はサーバー側にお任せ。 ただし、自分がコントロールするPlayerControllerの情報を 逐次サーバー側へと送信してあげる必要あり。 これをしないとサーバーとそれぞれのクライアント上で 自分の情報が反映されなくなってしまう。
  10. 10. サーバーへのログイン(その1) サーバー側でレベルを起動する際にオプションを渡すと、 Listenモードで起動するので、そこにクライアントは IPアドレスを指定してログインする。 LANを使っての場合は、LANオプションを指定。 WANの場合はオプションはいらないが、繋ぎにいく側の UDPポート(デフォルトでは7777)を開放する必要あり。
  11. 11. サーバーへのログイン(その1) クライアントのログインListenサーバーを実行
  12. 12. サーバーへのログイン(その2) UE4に用意されている『オンラインサブシステム』を使う。 これはプラットフォーム(Steam等)毎に用意されている、 オンライン機能をUE4用にラッピングして使えるようなっている。 セッション(ルームとも言う)作成、検索、参加、破棄を 簡単に行なう事ができ、マッチングシステムを提供。 エラーハンドリングまで簡単にできます。
  13. 13. サーバーへのログイン(その2)
  14. 14. Play In Editorの場合 レベルを実行した時点で複数プレイヤーを ログインさせた状態でいきなり実行可能! 実行時にサーバーとクライアントを それぞれ自動に振り分け。 Playボタン横から選択可能なメニューで プレイヤー数を設定しておきます。
  15. 15. 1つのPC上で即マルチプレイ!
  16. 16. レプリケーションについて
  17. 17. レプリケーションとは? サーバーがクライアントに対してネットワークを通じて、 情報をレプリケート(複製)する事によって、 クライアント間で差異が生じないように同期する。 これをネットワークレプリケーションと呼び、 UE4では何をレプリケートするかを選択する事が可能。
  18. 18. アクターのレプリケーション 基本はアクターに対してレプリケートを行ない、 多くのアクターではデフォルトでレプリケート設定になっている。 レプリケートがオンになっていると 自動的にアクターの動き等が 同期されるようになっている。
  19. 19. レプリケート権限 レプリケーションはサーバーのみが行なう事ができます。 クライアントはサーバーに対してレプリケーションして 欲しい情報を送信する必要あり。 つまりサーバーとクライアントか判断してロジックを 変更して動かしてあげる必要がある。
  20. 20. Switch Has Authorityマクロ サーバーと クライアントを 判断するマクロ。 ロジック分岐の際に 多用します。
  21. 21. アクター所有権限 基本的にアクターはサーバーでスポーンしますが、 例外的にクライアント上でアクターをスポーンした場合、 クライアントがアクターの所有権を持つ。 クライアント上のアクターはレプリケートされないので、 ロジックやダイナミクスを含むアクターは基本的にサーバー上で スポーンしておく事をオススメします。
  22. 22. 変数のレプリケーション ブループリント上で変数を作った場合には、 プロパティの設定ひとつでレプリケーション可能。 単純なレプリケーションの他に、 変数値が変更された場合のイベント通知も可能。 この場合にはサーバーとクライアント双方に送信される。
  23. 23. Replicated 最も単純な変数のレプリケーション。 設定をすると、変数値の変更は 自動的にサーバーからクライアントへ レプリケートされる。 クライアント上の変数値は一度 サーバーに送信してからレプリケートする。
  24. 24. RepNotify Replicatedと同様の設定方法で使用可能。 選択すると自動的に『OnRep_<変数名>』 という関数が自動的に追加。 中身は自由に実装が可能で、該当名の変数値が変更される度に この関数がイベントのように呼び出されるようになる。
  25. 25. RPC(リモートプロシージャコール)
  26. 26. RPCとは? ネットワークの先にある環境で関数やイベントを実行する事。 UE4では標準で3つの呼び出し方法が存在。 ブループリントではカスタムイベントを作成して使用する。 デフォルトでは『Not Replicated(複製なし)』 になっているので、必要に応じて設定する。
  27. 27. Multicast 呼び出しをサーバーで行なうと 全てのクライアントで処理が実行。 最も一般的なRPCイベント。 (Server to Client) クライアントで呼び出しても、 クライアント内でしか処理されない。
  28. 28. Run on Server 呼び出しをクライアントで行なうと サーバー上で実行される。 ただしアクターの所有権が必要。 (Client to Server) サーバー上で呼び出しても、 クライアント上へレプリケートしない。
  29. 29. Run on Owning Client サーバーから呼び出した場合に、 アクター所有権のあるクライアント上 でのみ実行される特殊なRPCイベント。 (Server to Client) クライアントで呼び出しても、 クライアント内でしか処理されない。
  30. 30. RPC使い分け 『Multicast』はサーバーから全てのクライアントで 同期する際に一番最も頻繁に使用する。 『Run on Server』はクライアントからサーバー上へ何かしら 情報を通知したい場合に使用し、変数値を同期させる 場合にも使用するので非常に重要。 サーバー上で変数値を反映させれば自動的にレプリケートされる。
  31. 31. RPC使い分け 『Run on owning Client』は最も特殊で、 アクター所有権を自分で管理しておく必要あり。 つまり、サーバーはそのアクターを誰が所有しているのかを 理解しておく必要があり、特定クライアントに対してのみの RPCイベントを行なう際にはこの仕組みを使用します。 またサーバーがアクター所有権を持っている場合もあり、 その場合には名前に反してサーバー上で実行されます。
  32. 32. アクター所有権の確認 自分がそのアクターを所有しているのか確認する際には、 Pawnの場合には『Is Locally Controlled』を、 PlayerControllerは『Is Local Player Controller』を使用します。
  33. 33. Reliability (信頼性) RPCには『Reliable』というプロパティがあり、 通信の信頼性を向上させる事が出来ます。 ただし、Reliableを設定すると通信帯域幅をより多く消耗し、 レイテンシーが大きくなる可能性があり、 リアルタイムマルチプレイゲームには向きません。 逆にパケットロスの可能性は大きくなります。
  34. 34. 通信パフォーマンス最適化 『Net Cull Distance Squared』は、 アクターのレプリケーションが届く範囲を 設定し遠距離の不要な通信しなくなる。 『Net Update Frequency』は通信の更新頻度 を設定する事が可能で少ないと通信も より少ない通信量で行なう事が出来るように。 『Net Priority』は通信混雑時の優先度。
  35. 35. マルチプレイヤー化 実演
  36. 36. マルチプレイヤー化 元々シングルプレイヤーなゲームを マルチプレイヤーへとライブノーディングしていきます! 今回使用するのはFPテンプレートを少し改造したもの。 デフォルトではシングルプレイヤーですが、 簡単にマルチプレイヤーへと変化します!
  37. 37. マルチプレイヤー化 ゲームジャンルによっては、すぐにシングルプレイヤーを マルチプレイヤーに出来る事がわかったと思います。 UE4はこれだけの事がブループリントのみでもいけます! もちろんC++を使えばもっと奥深い事も可能です。
  38. 38. その他 ネットワークやオンライン周り
  39. 39. パッチやDLC 4.8からその機能自体は存在。 あまり情報はないですが、少しずつ資料が増量中。 DLCというよりもMODやUGCとして扱われているようです。 https://wiki.unrealengine.com/Modding:_Adding_mod- support_to_your_Unreal_Engine_4_project サンプルプロジェクト https://github.com/tomlooman/ModSampleGame
  40. 40. コミュニティでの実績 UE4のフォーラムでMMOを作るためのキットも 実際に販売されています。 MMO Starter Kit https://forums.unrealengine.com/showthread.php?53208- MMO-Starter-Kit バックエンドサーバーにPHPを使用し、MySQLをDBに使用。 既にリリースされているタイトルもあり。
  41. 41. コミュニティでの実績 UE4をマスターサーバー化するプラグイン。 Master Server with Unreal Engine 4 Plugin https://forums.unrealengine.com/showthread.php?73739- Master-Server-with-Unreal-Engine-4-Plugin シンプルにサーバーを登録し、オンラインサブシステムなしで 複数サーバーを管理する事が出来るように。 UE4だけでサーバー管理が出来るようになるかも…?
  42. 42. コミュニティでの実績 HTTP通信をブループリントで実現するプラグイン。 VaRest https://forums.unrealengine.com/showthread.php?13509- Plugin-Http-s-REST-blueprintable-JSON-and-Parse-REST-API- manager-at-once-(VaRest) JSON Query https://forums.unrealengine.com/showthread.php?7045- PLUGIN-JSON-Query
  43. 43. コミュニティでの実績 日本でもプラグインを作って公開している人も!! UE4でBlueprint上からHTTP通信を行うWebApiプラグインを公開しました http://hogetatu.hatenablog.com/entry/2015/08/17/134731
  44. 44. コミュニティでの実績 日本ではTwitterプラグインを作っている人もいます! Twitter4UE http://blog.cnu.jp/2015/08/27/twitter-plugin-for-ue4/ Pull Requestも歓迎らしいので、 気になる人は改良して送ってみよう!
  45. 45. まとめ UE4はネットワーク周りも相当充実しています。 面倒くさいRPC周りも設定をメニューからするだけ! あまりにも簡単にネットワーク対応が出来るの驚き。 スマホであればHTTP通信さえ出来れば十分なゲームもあるはず。 さぁUE4使いの皆さん。マルチプレイゲーム作ってみませんか?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×