【輪講】UE4ネットワーク

こんにちは。
今回はUE4のネットワークについて書いていきたいと思います。

まずUE4でネットワークゲームを作る際、最低限知っておかなければいけない4点を詳しく書いていきます。

・サーバー/クライアント
・レプリケーション
・アクターの所有権
・PRC(リモートプロシージャコール)

上記4点の仕組みをしっかりと理解すればUE4で簡単なネットワークゲームを作れると思います。

まずは、サーバーとクライアントについての説明です。

UE4のネットワークはクライアント・サーバーモデルを採用しています。
ただし、UE4はエンジンがクライアント、サーバー両方をこなせる仕組みを持っています。

最初からエンジンコアの部分でネットワークに対応する設計になっているので、
シングルプレイヤーのゲームをマルチプレイヤーにするのもすごく簡単になっています。

これはプログラマーとしていいのか分かりませんが、
C++のコードを書かなくてもブループリントのみでマルチプレイヤーのゲームが作れるようになっています。

サーバーについての説明をします。
ネットワークにおける最高権限を持ち、ゲームプレイフローを管理します。
クライアントはサーバーにログインしてから、あらゆる情報に従う必要があります。

ListenサーバーモードとDedicatedサーバーモードがあります。
どちらを使用しても役割自体はかわりません。

【Listen = 聴く】
Listenサーバーモードはクライアントと同じようにゲームプレイを行う事が可能で
サーバー機能を有しつつもクライアントのように動作します。

利点は見た目にも動作がわかりやすく、テストプレイもしやすいです。
特に問題がなくさくっとマルチプレイゲームを作りたければListenサーバーモードを使いましょう。

【Dedicated = 専用】
Dedicatedサーバーモードはいわゆる完全なサーバー専用モードです。
クライアントのような画面はありません。
cmdのような真っ黒い画面上でも動作します。

最低限のリソースで動作し、クライアントを処理するのにフルスペックで動作するので、
比較的大規模なネットワークのマルチプレイヤー向けのモードです。
MMORPGとかを作るのであればこちらを使用するのがいいんじゃないでしょうか。

クライアントについて。
サーバーにログインして、各々の見た目の部分を担当します。
ゲームロジックの処理はサーバー側にお任せです。

ただし、自分がコントロールするPlayerControllerの情報を随時サーバー側へと送信してあげる必要があります。

これをしないとサーバーとそれぞれのクライアント上で自分の情報が反映されなくなってしまいます。

エディタ上ではどちらのサーバーを使うのか、何人でやるのか設定する事が出来ます。

%e7%84%a1%e9%a1%8c1

1でプレイ人数(人数分ウィンドウが出ます。)
2でどちらのサーバーを使用するのか設定します。(チェックなしの場合Listenサーバー。)

設定を終えてからプレイボタンを押すと、

%e7%84%a1%e9%a1%8c2

このように自分が設定した人数分のウィンドウが出ます。
(上の画像はListenサーバー、人数は二人で設定してあります。)

ウィンドウの枠の部分にこのウィンドウはサーバーなのかクライアントなのかが画像の赤く囲ってある部分に表示されます。

次にレプリケーションについてです。
レプリケーションとは何!?って方が大半だと思いますのでレプリケーションの説明からしていきます。

【レプリケート = 複製】

レプリケーションとは『複製する』という意味です。

レプリケーションするものは基本的にアクターと変数です。
ではなぜアクターと変数をレプリケーションする必要があるのかを説明します。

1vs1の対戦ゲームがあると仮定します。
AさんがBさんを攻撃をした場合、必ずBさん側の画面のAさんも攻撃を行っていなければHPなどに差異が生じてしまいます。

ここでレプリケーションを使用します。
キャラクター(アクター)をサーバーにスポーンさせ、アクターのレプリケーションをすることによって、
アクターの情報が各クライアント間で差異が生じないように同期するようになります。

これをネットワークレプリケーションと呼び、UE4では何をレプリケートするかを選択する事が可能です。

レプリケーションはサーバーのみが行う事が出来ます。
クライアントはサーバーに対してレプリケーションして欲しい情報を送信する必要があります。

つまりサーバーとクライアントか判断してロジックを変更して動かしてあげる必要があるのです。

続いて所有権についてです。
サーバーで所有しているのかクライアントで所有しているのかによってブループリントの書き方が変わってきます。

例えばレプリケートしなければいけないものはサーバーが所有権を持つ必要がありますし、
クライアントだけ実行すればいいものはクライアントが所有権を持っておく感じです。

クライアント上のアクターはレプリケートされませんので、
ロジックやダイナミクスを含むアクターは基本的にサーバーでスポーンしておくといいでしょう。

最後にPRC(リモートプロシージャコール)の説明です。
RPCとはネットワークの先にある環境で関数やイベントを実行する事です。

UE4では標準で3つの呼び出し方法が存在します。

ブループリントではカスタムイベント(関数みたいなもん)を作成して使用します。

a

デフォルトでは『Not Replicated(複製なし)』になっているので、状況に応じて設定しましょう。

3つの呼び出し方法をそれぞれ解説していきます。

【MultiCast】
multicast
呼び出しをサーバーで行うと全てのクライアントで処理が実行されます。
最も一般的なRPCイベントです。(Server to Client)

クライアント側で呼び出しても、クライアント内でしか処理されません。

【Run on Server】
runonserver
呼び出しをクライアントで行うとサーバー上で実行されます。
ただし、アクターの所有権が必要となります。(Client to Server)

サーバー上で呼び出しても、クライアント上へレプリケートしません。

【Run on Owning Client】
runonowningclient
サーバーから呼び出した場合に、
アクター所有権のあるクライアント上でのみ実行される特殊なRPCイベントです。

クライアントで呼び出しても、クライアント内でしか処理されません。

これら3つの使い分けですが、
【MultiCast】はサーバーから全てのクライアントで同期する際に一番頻繁に使用します。

【Run on Server】はクライアントからサーバー上へ何かしら情報を通知したい場合に使用します。
変数値を同期させる場合にも使用するので非常に重要です。

サーバー上で変数値を反映させれば自動的にレプリケートされます。

【Run on Owning Client】は最も特殊で、アクター所有権を自分で管理しておく必要があります。
つまり、サーバーはそのアクターを誰が所有しているのかを理解しておく必要があります。

特定クライアントに対してのみのRPCイベントを行う際にはこの仕組みを使用します。
また、サーバーがアクター所有権を持っている場合もあり、その場合には名前に反してサーバー上で実行されます。

この3つ(特にMultiCastとRun on Serevr)を使わないとまずネットワークのゲームが作れません。
ですので、しっかりとそれぞれの役割や動きを理解しましょう。

今回は時間の都合上セッションの作成/検索/参加/破棄について説明出来ませんでしたが、
UE4にはオンラインサブシステムと呼ばれる非常に便利なものがありますので、もし作る方がいたら自分で調べてみて下さい。

以上4点をしっかりと理解すれば誰でも簡単にマルチプレイヤーゲームを作る事が出来るので興味がある方はぜひ作ってみて下さい!

虎参備忘録~輪講編-003~

今回の輪講は留学生との共同プロジェクトで、UE4を使って実装したFlockingのAIについて紹介します。

このサイトを参考にAIを組んだので、今回はこのサイトを使って、プロジェクトを見せながら話て行きたいと思います。

 

サイト内にも書かれていますが、先にざっくりとFlockingについて説明しておくと、「分離」「整列」「結合」の3行動からなる操舵力をあわせて、群れのような動きを再現するアルゴリズムです。

 

「分離」は、そのオブジェクトの持つ領域内にいるほかのオブジェクトから離れる操舵力を作ります。

「分離」の力が強いほど、オブジェクト同士の距離は離され、バラバラに動きます。

 

「整列」は、そのオブジェクトの持つ領域内にいるほかのオブジェクト達と同じ方向、同じ速度になるような操舵力をつくります。

「整列」の力が強いほど、イワシの群れのようなある程度まとまった集団を作りやすくなります。

 

「結合」は、そのオブジェクトの持つ領域内にいるほかのオブジェクト達の中心に向かう操舵力を作ります。

「結合」の力が強いほど、集団の密度が増します。

 

さて、簡単に説明したところで、プロジェクトを見せながら解説したいと思います。

 

 

最後に、Flockingはパラメータの調整によって大きく見栄えが変わります。

パラメータをうまく調整できれば様々な群の動きも表現出来るでしょう。

大元のプロジェクトはサイトにあるので一度自分でいじってみるとより理解が深まると思います。

開発備忘録【外伝 輪講編】第一弾


                 ≪ 目次 ≫          ≪ 次のPart ≫


おはこんばんちわ。大原です。
外伝ということで輪講で使った資料の投稿になります。
今回は、『UE4でCSVデータを扱う方法』について書いていきます。
続きを読む

C++コードをUE4で書いてみる。

お久しぶりです!!

最近うっかり更新するのを忘れていました。

今回はUnreal Engine4でC++のコードが書けると聞いたので、そのことについて、
書いていきます。

Unreal EngineではC++を」書く場合、手順があります。

まずはプロジェクトを作成します。(今回はSide Scrollerを使用)

プロジェクトを作ったら、UnrealEditorのメニューから「New C++ Class…」
を選択します。

無題

すると親クラスの選択が来ます。 続きを読む

地道でいいから勉強しよう pt4

こんにちは、
前回の続きから書いていきたいと思います。

<制作するマップを計画する>
1.移動ツールを使って設置したスタートを
  「X=-400,Y=400,Z=102」に設定します。

2.「モード」から「BSP」>「ボックス」をドラック&ドロップします。
   ボックスには分かりやすい名前を付けましょう。

3.名前を付けたボックスのサイズを「X=800,Y=200,Z=200」に設定し、
  「X=-100,Y=200,Z=110」の位置へ配置する。

4.ボックスを複製移動(Altキーを押しながら移動する)するか、
  もしくは新しい「ボックス」ブラシを「モード」パネルからビューポートに
  追加し、名前を付けましょう。

5.追加したボックスのサイズを「X=600,Y=400,Z=200」に追加し、
  「X=0,Y=-100,Z=110」の位置へ配置します。

6.3つ目の「ボックス」ブラシを追加して、名前を「SlopeBrush」に
  変更します。サイズはX,Y,Zすべて「200」とし、
  「X=200,Y=-400,Z=110」の位置に設定します。

<空洞を作る>
ドラック&ドロップするブラシの中には、形状を空間に追加する
「加算ブラシ」や形状を任意の形状に削り取る「減算ブラシ」があります。

1.「モード」パネルより、「BSP」>「ボックス」をビューポートに
   ドラッグ&ドロップし、分かるように名前を付けましょう。

2.「詳細」から「BrushSetting」>「BrushType」を「Subtractive」に
   変更します。これで、ブラシは加算から減算に変更できます。

とりあえず今回はここまで。

虎参備忘録~UE4編‐007~

英語版を基準に書いています

箇条書き注意

UE4@5/27-ペーパーニンジャを作る(12章)

 


入力マッピングの追加はProject Settings > inputのBindingsで行う。

入力マッピングには

デジタル入力を扱うActionMappings(押した時や放した時にイベントが呼ばれる)

マウスの移動量やアナログスティックなどの入力を使うAxisMappings(Tick並みに呼ばれている)

の2種類がある。


続きを読む

[UE4]プロトタイピングについてお勉強 Part7

今日からはUnreal Engine 4で極めるゲーム開発:サンプルデータと動画で学ぶUE4ゲーム制作プロジェクトの第8章の「スタティックメッシュを配置する」の続き 「フォルダ機能を使う」から勉強していきます!

  • フォルダ機能を使う
     マップ上の何もないところをクリックして選択を解除したあと、[ワールドアウトライナ]パネルの右上にあるフォルダのアイコンをクリックし、サブフォルダを追加
     ※サブフォルダに共通するアクタを入れておくことで、可視/不可視や選択などを一括で行うことができ、作業の効率が上がります。

  • 壁を配置する
     ビューポートで配置するのが主な内容だったので省略します。

  • ブロッキングボリュームを直接配置する
     ビューポートで配置するのが主な内容だったので省略します。

  • 坂道のメッシング
     [ビューポート]か[ワールドアウトライナ]でスロープのアクタを選択
      ↓
     [詳細]パネルで[Actor]→[Convert Actor]をクリックして、サブメニューから[Blooking Volume]を選択
      ↓
     床のスタティックメッシュをスロープの根元あたりにドラッグ&ドロップし、スロープの向きに合わせる
      ↓
     ドラッグ&ドロップした床をスロープの傾斜にスロープの傾斜に合わせて傾ける
      ↓
     カメラタイプを[フロント]に変更、位置スナップをオフにする
      ↓
     Z位置をブロッキングボリュームのラインに合わせる
      ↓
     1枚分の床材の位置が決まったら、この傾きのままコピーしてスロープに敷き詰めていく
      

今日はここまでです。
次回は

8章「Zファイトを調整する」

から勉強していきます!!

  

地道でいいから勉強しよう pt.3

こんにちは。
今回はUE4の参考書「UnrealEngine4で極めるゲーム開発」の中に掲載されているサンプルを制作しながら
勉強していきたいと思います。

<ボックスで床を作ろう>
まず土台から作っていきます。
1.「Modes」パネルの「BSP」をクリックし、「Box」を
  ビューポートへドラッグ&ドロップで配置します
2.配置したBoxの名前を「PlatformBrush」に変更します。
3.「Details」の「BrushSetting」で
[X=1000,Y=1000,Z=20]に変更します
4.移動ツールで[X=0,Y=0,Z=0]の位置に移動させます

<ライトとスタート地点を配置>
作業するにあたって、空のプロジェクトから制作し始めたら
ライトが必要になります。
1.「Modes」の「Lights」から「DirectionalLight」を
  マップ上にドラッグ&ドロップします。
2.編集しやすいように、土台の上に持っていきましょう

開発備忘録【Unreal Engine 4 編】 Part 0


                 ≪ 目次 ≫          ≪ 次のPart ≫


おはこんばんちわ。大原です。
では、さっそくUnreal Engine 4(以下『UE4』)について書いていきたいところですがUE4を準備しないと始まりません。
なので今回は『インストール方法』『環境設定』について書きます。
続きを読む