【輪講】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点をしっかりと理解すれば誰でも簡単にマルチプレイヤーゲームを作る事が出来るので興味がある方はぜひ作ってみて下さい!

【輪講】Hansoftについて

プロジェクトのリーダーをする際、
必ずプロジェクトの管理や仕事の割り振り、スケジュールの管理が必要になってきます。

それらを可視化させるのが『Hansoft』です。

今回はこの『Hansoft』の導入から使い方を説明したいと思います。

まず、この『Hansoft』の優れている点について説明します。

『Hansoft』はゲーム開発者が自分達の開発を管理するために生み出されたツールです。
そのため、データベースの構造及びデータベースへのアクセス、
サーバーとクライアント間の通信について、速度とセキュリティを特に重視されています。

1.操作が軽い→ストレスフリー
『Hansoft』の操作は軽快で、かつCPUへの負荷も軽く、常時起動しても開発マシンへの目立った影響がない。

2.導入が速い→学習コストを考慮しなくてもよい
Windowsでも、OSXでも、Linuxでも、サーバーやクライアントのインストールはワンクリックで済みます。
直観的なインターフェースで、自分のやりたいことをすぐ開始出来ます。

3.複数の開発方法を併用する開発をサポート→1つのツールでプロジェクト全体を管理出来る
例えば、以下のような1つのプロジェクトに複数の開発手法が混在する場合であっても、
『Hansoft』だけでプロジェクト管理が出来ます。

・組み込み開発:ソフトウェア開発チームはアジャイル的に開発する一方、ハードウェア開発チームはガントチャートを利用している。
・ゲーム開発:ソフトウェア開発チームが反復で開発しつつ、デザインチームはカンバン方式で開発する。

『Hansoft』はアジャイル開発プロジェクト管理をサポートすることはもちろん、従来のガントチャートを用いたプロジェクト管理にも対応出来ます。

4.多言語対応→多国間の共同開発をサポートする
ユーザーは自分の好みによって、インターフェースを英語、日本語、中国語の中から選ぶ事が出来る。

以上がHansoftの基本的な機能と特長です。

実際に私が調べた使い方をご紹介します!

まずはHansoftのインストールと設定です。

今回の説明はWindowsOSにおいての説明となります。

まずは、

Downloads


でソフトをダウンロードします。

rinkou1

Hansoftは9名まで無料で使用出来ます。
作業をするパソコンをサーバーにする場合、サーバーとクライアントを一緒にダウンロードできる
「All-in-One Small Team Edition」の「Installer for Windows」をクリックしてダウンロードして下さい。

但し、この場合ホストの人のパソコンの電源を落としてしまうと他の人も使えなくなってしまうので微妙です。

常時起動出来るサーバー用パソコンをサーバーとして使用しましょう。
その場合、「Server」の「Installer for Windows」をクリックしてダウンロードして下さい。

その他ホストにならない方は、「Client」の「Installer for Windows」をクリックしてダウンロードして下さい。

今回は「All-in-One Small Team Edition」についての説明を行います。
ダウンロードした「Hansoft Trial 9.1047.exe」ファイルを起動します。

ドロップダウンを「日本語」→OK→次へ→同意する
→ホストとなるPCを使ってる方はドロップダウンを「すべて」
他の方は「クライアントのみ」にし次へ→次へ→インストール→インストール完了後自動的にHansoftが起動されます。

この自動的に起動されるソフトはクライアント側ですので、
まずはそっと閉じましょう。

スタートからすべてのプログラム→Hansoft→Hansoftサーバー管理を起動します。

無題2

サーバー管理のほうはサーバー管理者と書いてあります。

Hansoftサーバーにホストとなるコンピューター名を入れます。
(学校で使うならPCに貼ってあるシールの名前を入力して下さい。)

ポートに関しては最初から入力されている「50256」のままで大丈夫です。

接続→このサーバーを信頼しますをクリックします。
管理者パスワードを聞かれるので「hpmadm」を入力しサインインします。

無題

無事サインイン出来ると上の写真の画面が出てきます。
画面を見てもらうと分かりますが、新しいデータベースを作成出来たり、
データベースの削除を行えたりとサーバー関連の処理はここで行います。

次にクライアントを起動します。
スタートからすべてのプログラム→Hansoft→Hansoftクライアント

サーバーと同様にHansoftサーバーを入力し、ポートはそのままで接続します。

ユーザー名とパスワードを聞かれますが、
まだユーザーを作成していないので管理者としてサインインします。

ユーザー名「administrator」パスワード「hpmadm」と入力しサインインします。

無題1

サインイン出来ると上の写真の画面が出てきます。
まずは他の人がサインイン出来るようにユーザーを作成していきましょう。

ちなみにですが、先程説明した通り「All-in-One Small Team Edition」を使用すると、
9名までしかユーザーを作成出来ません。

さらに最初から3名作られていますので、必ず削除して下さい。

無題3

削除したら「新規ユーザーを作成」をクリックし、新しくユーザーを登録していきます。

無題4

「名前」は本人の名前を入力すると他の人が分かりやすくなります。
これがそのままサインインする際のユーザー名となります。

パスワードは全員まずは簡単なもので一緒にしておきます。
セキュリティ部分で「ユーザーは次回ログインの際にパスワードを変える必要があります」にチェックを入れましょう。

あとは各チームごとにルール決めをしてチェックを入れて下さい。

無題5

ユーザーグループは私達のチームではProjectSEEKER、プランナー、プログラマー、デザイナーで分けて各ユーザーに設定しています。

ユーザー登録が終わったらクライアントをダウンロードしたプロジェクトメンバーもサインイン出来るようになります。

ここからプロジェクトの管理の仕方になりますが、まだ使い方を全て把握出来ているわけではないので分かっている部分だけ説明します。

まずはプロジェクトの作成を行います。

無題ww

まずは上の写真の1番、先程はユーザータブでしたが今度はプロジェクトタブに変更します。
変更したら2番、新規プロジェクトの作成をクリックします。

無題aaa

まずはプロジェクト名を入れます。
Projectゲームタイトル みたいな名前にするといいと思います。

新規ユーザー向け標準モードを今回はアジャイルを使用にチェックします。

メソッドテンプレートをスクラム、スケジューリングメソッドを「固定期間」メソッドを使用(推奨)を選びます。

タスク完了メソッドは予定タスクの完了表示にステータスカラムのみを使用にチェックをします。

全て設定し終わったらOKをクリックします。

ユーザーを追加するか聞かれるのでプロジェクトメンバー全員を入れましょう。

ユーザーグループを追加すると手っ取り早いです。

無題222

プロジェクトが作成されるとメインマネージャー部分で「メインマネージャーが選択されていません」と出ていますので、
ウィンドウ下部分でメインマネージャーを設定しましょう。

他にもメンバーの閲覧制限やプロジェクト履歴へアクセス可能かどうかの設定も出来ます。

無題3333

上の写真のプロジェクト:プロジェクト名を選ぶと、プロダクトバックログ、品質保証(QA)、プランニングタブが出てきます。

無題22222

無題444444

最終的にはこんな感じになってくると思います。
まだ使い方の勉強中ですので勉強しながら分かった部分をブログにあげていきたいと思います!

【輪講】ブループリントクラスと変数/関数について

今回は輪講について私が研究した事を書いていきます。

C++を理解していてもこれがブループリントになるとわけわからん!って人多くないですか?
私もそうでした。

しかし理解してからはなるほど!って思う事が多いです。

UnrealEngine4でブループリントを使うにはどれがクラスでどれが関数なのか、
まず把握した方がいいと思います。

今回はみんなが使い慣れているcocos2d-xのプログラムと見比べながら解説していきます!

まずはブループリントクラスの作成!

Content内で右クリック→Blueprint Class→親クラスを選択

無題1無題2

ここで選択したクラスによって使用出来る関数(以下ノード)が変わります。
いわゆる継承です。

作成したブループリントを見てみましょう。
右上にParent Class 〇〇とあるはずです!

無題3

これをcocos2d-xで見ると、大体みんながよく使うのは『Layer』『Node』辺りでしょうか。

class ThirdPersonCharacter : public Character
{
  ~略~
}

こんな感じになります。

ある程度はUnrealEngine側で用意しているものを使っていけば出来ますが、
例えばデザインパターンを取り入れたい時には、ブループリントクラス作成時に自分の作成したクラスを選択するなどしましょう。

次に関数の作成です。

その前にまずは変数の説明をします。

無題4

Variablesの『+』マークをクリックして変数を作成します。

無題5

・Variable Name→変数名
・Variable Type→変数の型(左側のドロップダウンで型指定、右側にある9個に区切られた四角マークをクリックすると配列になる)
・Editable→インスタンス上で変数がパブリックで編集可能かどうか
・Tooltip→コメントみたいなもの
・Expose on Spawn→SpawnActorノードにピンが追加される
・Private→プライベートにする
・Expose to Matinee→マチネに公開する
・Category→ラベル毎に変数を設定する事が出来る
・Replication→ネットワーク上で複製するか否かを指定する

Default Valueでデフォルト値を設定出来ます。

例えばPrivateにチェックを入れてint型のScoreという変数を作成するとします。

cocos2d-xというかC++ではこうなります。

~略~
private:
    int Score;
~略~

次に関数の使い方を説明します。

無題6

Functionsの『+』マークをクリックします。

無題7

Description→関数の説明
Category→カテゴリ
Keywords→キーワード
Compact Node Title→演算子のオーバーロードのような使い方が出来る例『+=』といれる
Access Specifier→Public、Protected、Privateを設定する
Pure→チェックを付けると純粋関数になる
Const→チェックを付けるとconst関数になる

Inputsで引数、Outputsで戻り値の設定が出来ます。
Pass-by-Referenceにチェックを入れると参照渡しになります。

例としてスコアのGet関数を作ってみましょう!

無題8

cocos2d-xで書くと、

int GetScore2() const { return Score };

となります。

基本的な説明となりますが以上となります。

各親クラスを継承したクラスで何のノードが使えるかの説明は、
ノードの量が膨大すぎて説明出来ませんので各自で調べながらゲームを作ってみましょう!

ワークフロー その②

こんにちは!
ワークフローについて書いていきます。

■ステージ制作ワークフローの一例

▼コンセプト決定

・プロット
初めにステージのプロットが制作されます。
プロットとは構想の事です。
ユーザーがこのステージで何を見聞きして何を体験するのかを決めます。

・コンセプトアート
プロットに基づきコンセプトアートの制作が行われます。
テキストだけでは認識を統一する事が出来ないためコンセプトアートが必要になってきます。
またコンセプトアートにはもう一つ大きなメリットがあり、
ゲームの舞台が早い段階で視覚化されるので、レベルデザイナの作業と並行してアートアセットの制作を進めることが出来ます。

▼プレイ可能なプロトタイプ制作
レベルデザイナが完全にプレイ可能なステージを制作します。

コンセプトアートを正確に再現する必要はありません。
テクスチャさえ貼られていない長方形や円柱といった単純なメッシュを使用してステージの形を作り、
ゲームプレイをテストします。
この状態のレベルデータはグレーボックスと呼ばれており、グレーボックスを作りながらゲームの遊びを完成させるこの工程を
グレーボクシングといいます。

グレーボクシングの段階でゲームの遊びを完全に完成させる点です。

・グレーボックスとゲームメカニクス
グレーボックスの作業はレベルデザイナが試行錯誤出来るように一人で進められるのが理想です。
現実は進められないみたいです。

・グレーボックスと見た目
どんな世界観だろうと同じ地形ならグレーボックスの見た目は変わりません。

・グレーボックスとチェック
グレーボックスで作った遊びが十分面白いかどうかのチェックは、担当したレベルデザイナの自己採点だけでなく、
リーダーやディレクターを交えて行うことになります。

今日はここまでで次回もワークフローが続きます。

ProjectSEEKER_プロトタイプ完成まであと少し!

こんにちは!
UE4の勉強ブログも大事ですが、こっちも書いていかないとでした。

前回からかなり進み、もう少しでプロトタイプ完成という所まで来ました。

正確にはプロトタイプ完成後のイテレーション作業中です。

ゲーム内容としては、いくつかモードを考えているのですが、
単純にマルチ対戦型のゲームとして開発しています。

※プロトはローカルマルチとして開発していますが、ネットワーク対応予定です。

中央のダイヤ(仮)を相手を倒したり邪魔をしたりし、奪い合うゲームです。
現在はこれに何か要素をつけれないか検討中です。

例えば最近人気になったラグビー要素とか。

予定より早くプロトタイプが完成したので、
イテレーション作業をしっかりと行っていきたいと思います。

次回は自分が実装した処理を紹介していきたいと思います。

ワークフローとイテレーション

こんにちは!
今日はワークフローとイテレーションについて書いていきます。

ゲームの作り方はジャンルや規模によって作り方が異なるため、どんな開発現場にも適用観桜な万能なワークフローというものはない。
しかし、コンテンツ制作である以上、仕事の進め方というものは定義が可能。

漫画の制作に例えると、

ネーム

鉛筆で下書き

ペン入れ

の順に制作します。
※ネーム等言葉が分からない方はそれぞれ自分で調べてください。

ネームや鉛筆で下書きをせずにペンで書き始めて、途中で変更したくなったら最初からやり直しになってしまいます。
これはゲーム制作も同じです。

いきなり本制作に入って途中で仕様の変更をしたくなったら一から作り直しになる場合もあります。

ワークフローの原則は上流工程が完了するまで下流工程はスタートしないのと
下流工程がスタートしたら上流工程は変更しないです。

引き続き漫画で例えますが、
いいネームを作るにはどうすればいいでしょうか。

センスやコツも必要でしょうが一旦ネームを仕上げてそれを眺めて改善点を見つけ、それを元に修正を加えれば少なくとも最初のネームより良くなると思います。

もうこれ以上改善点が見つからないところまでこれを繰り返していけばかなりいいネームになるのではないでしょうか。

この反復をイテレーションと呼びます。

プログラムにもありますよね。

次回もワークフローについて書いていきます。
そろそろ輪講も書いていきます。

プロダクションについて

こんにちは!
本日はプロダクションについて書いていきます。

プロトタイプとプリプロダクションを経て作るものも作り方も机上の空論ではなくなります。

ここで人員を追加し制作体制をスケールアップする事が出来ます。
ゲームの規模によってはこの段階ですごく人員が増えます。

しかし、それによって新しい問題も発生します。
ですが、プロトタイプとプリプロダクションで見極めたことに間違いがなければ少なくとも奈落へは向かっていかないはずです。

次回はワークフローとイテレーションについて簡潔に書いていきます。

パーティカルスライスについて

本日2回目の投稿です!
パーティカルスライスでは、本来ならステージ1~ステージ10で順を追って体験することになる『遊び』を、
ひとつのステージに盛り込みます。

たとえばステージ1~5はジャングルを探検し、ステージ6~8はヨットやダイビングで南洋を冒険し、
最後はグライダーで雪山を滑空しながら戦うゲームがあるとします。

このゲームのパーティカルスライスは、ひとつのステージにジャングルと海と雪山をコンパクトに押し込み、
ヨットやグライダーも使うことができるというカオスなステージになるでしょう。

この特別なステージの制作を通じて、当初想定していなかった大きな問題に気づくことができ、
雪山や海底を効率よく作るためのツールも開発されるそうです。

当初計画のステージ数は物量が予算を遥かに上回っていることがわかり、
品質を落とすか物量を落とすか考えた結果、ステージ数を3つ削ることにしたそうです。

このようにパーティカルスライスを行うだけで、ちゃんと最後まで作り上げるかの確認が出来るので行ったほうがいいと思います。
しかし、このパーティカルスライスで制作したステージは破棄することになります。

プロデューサーのような予算確保とその用途について責任を負っている人たちは、
予算の問題から現実的なプリプロダクションを行う決断を下すことになります。

次回はプロダクションについて書いていきます!

プリプロダクションについて

こんにちは!

プロトタイプで面白い!と証明出来れば次は本制作(プロダクション)に進みます。

しかし、理想をいえばプロトタイプとプロダクションの間にもう一つの段階を挟み込むべきです。

それが『プリプロダクション』です。

プロトタイプではゲームの遊びは検証しましたが、ゲーム制作のワークフローは検証されていません。

最終品質はどんなもので、それは自分たちにとって、技術や予算や期間的に達成可能なものなのか。

プロトタイプとプリプロダクションでは異なる課題に取り組むことになります。

ワークフローもはじめは仮設に過ぎず、実際の製品で作るものと同じ水準のものを作りながら、
ワークフローを検証し、本番の制作に耐えうるものに改善していく必要があります。

プリプロダクション段階で作るものとして、多くの開発会社が『パーティカルスライス』という概念を採用しています。

次回はこの『パーティカルスライス』について書きたいと思います。

プロトタイプについて

こんにちは!
今日はプロトタイプについて書いていきたいと思います!

プロトタイプ(Prototype)とは、必要最低限のものを備えた試作品のことです。
ゲームの核となる部分のうち、紙の上では分からないものを制作します。

プロトタイプはデジタルである必要はなく、アナログを組み合わせたり身体を使って作ることもあります。

ゲーム制作を行う際、まずは企画を考える所から入ると思います。
企画を考えてからみなさんは本制作に入っていませんか?

本制作途中でゲームが面白くなかったら全て台無しになってしまいます。

そこで企画の案が本当に正しいのか、面白いのかを確認するためにプロトタイプの制作を行うのです。

プロトタイプは作ったものを一旦全部捨てるぜ!くらいの姿勢で臨んだ方が思い切りもスピードもでます。

みなさんもまず本制作を行う前にプロトタイプ制作を行いましょう!