スポンサーサイト

スポンサー広告
-- /-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

「Unreal Fight」遊ぶ環境

UE4 - UnrealFight
06 /12 2017
5/14の記事で紹介した「Unreal Fight」ですが何回かに分けて紹介していくと言って、あれから1ヶ月経ってしまいました(笑)
とりあえず、1つ目の課題というか問題というか、紹介します。

まず、今回ゲームを文化祭で展示するということで、どんな形で遊んでもらうのか決めました。
一番の希望としては、ゲームセンターみたいに、1人で遊ぶこともできるし、対面式で2人で対戦もできる形。
イメージはこんな感じです。

で、この形を実現するのにもいろいろ方法はあるかと思いますが、次のどれかになるかとおもいます。
1つ目が、PCを2台用意して、1人で遊ぶときは通常どおりで、2人で対戦する場合は、どちらか一方をサーバ、もう一方を
クライアントにする方法。サーバーっていってもUE4のリッスンサーバーです。
2つ目が、PC1台デュアルディスプレイで、ゲームを二つ起動する。リッスンサーバーで、片方をサーバー側として起動して、
もう一方をクライアント側として起動しておく。
3つ目が、PC1台デュアルディスプレイで、起動するゲームは一つで、画面を分割して引き延ばして、あたかも各ディスプレイでゲームが起動しているかのように見せる。

他にも方法はあると思いますが、思いつく限りで低コストなのはこのくらいじゃないかと思います。
他に良い方法があったら教えてください。

で、1つ目はPCが1台しか用意できないということで除外。

2つ目が実現できるかどうかテストする。

簡単にホストかクライアントか選択するスタート画面を作る。
適当にレベルと、ウィジェットを作成する。
画像中では、"StartLevel"と"startWidget"がそのファイルです。



"StartLevel"のレベルブループリントはこんな感じです。
スクリーンに映すウィジェットには新規追加した"startWidget"を選択しています。



"startWidget"のGUIはこんな感じです。
シンプルに HostになるかClientになるかのボタン2つです。


同じく"startWidget"の、ブループリントです。
ボタンがクリックされた時のイベント処理を書いてます。
一つ目がホスト側の処理で、二つ目がクライアント側の処理です。



で、ビルドする前にいくつか準備をします。
まず、起動時に開くレベルを"StartLevel"に設定


次に、プロジェクトのフォルダ(MyProjectとか)/Config/DefaultEngine.ini に以下のテキストを追加する。
そうしないと、"Create Session"系の関数が使えない。

[OnlineSubsystem]
DefaultPlatformService=Null


済んだら、ビルドして、
ゲームを二つ起動。こんな感じになるかと。


で、左側のウィンドウで"Host"をクリックするとこんな感じ


右側のウィンドウで"Client"をクリックするとこんな感じになって、

ちょっと時間が経ってから、こうなる。


とりあえず、ローカルでのマルチプレイは大丈夫そうだなと思いきや、、、


問題発覚


ゲームウィンドウを含めてソフトウェアのウィンドウには、フォーカスされているアクティブウィンドウと、
フォーカスされていない非アクティブウィンドウってのがあります。
で、UE4のゲームは非アクティブだと画面は動くが、音が出ないという仕様?みたいで、、、
一方のウィンドウにフォーカスをしている時に、もう一方のウィンドウのプレイヤーが発砲をしても、
音が出ないという、、、
もしかしたら、UE4に限らずゲームは非アクティブウィンドウの時は音は出ないのかもしれませんが。



で、この解決策を半日程調べましたが、特に有益な情報は得られなかったので、
次のステップ

ゲーム画面を分割して、ウィンドウをもう一方のディスプレイまで引伸ばすことをやってみます。

まず、「GameInstance」クラスを継承して、「MyGameInstance」を作成します。



MyGameInstanceにさせることはプレイヤーの数の保持だけです。MyGameInstanceのブループリントから
int型の変数を用意しましょう。初期値は1にしておきます。



作成したMyGameInstanceをプロジェクトに設定します。ついでに、画面の分割方式もverticalに設定
しておきます。



「FirstPersonGameMode」クラスのパラメータの、DefaultPawnClassをSpectatorPawn(観戦)に、HUD ClassをNoneにします。HUD Class にNoneを設定しているのは単純に画面中心のポイントが邪魔なだけです。


startWidgetを編集します。


StartLevelを編集します。CreatePlayerを実行すると、プレイヤーを動的に追加できて、自動で画面が
分割されます。Addto PlayerScreenを実行すると、そのウィジェットを保持しているプレイヤーのスクリーンに
ウィジェットが表示されます。


FirstPersonExampleMapのレベルブループリントを編集します。



何をするかというと、プレイヤーの数だけキャラクターをスポーンさせます。


ビルドして実行しましょう。




伸ばして

伸ばして

伸ばす


で、一人でプレイをクリックすると、


左のディスプレイではキャラクターが出現し、右のディスプレイでは何も出現せず、観戦モードで始まります。





で、二人でプレイをクリックすると。

両方のディスプレイにキャラクターが出現し、

それぞれ操作することができました。


もちろん、一方のディスプレイのサウンドが聞こえないという現象も起きず




最終的には、こういうスタイルになりました。


はい(笑)
お気づきの通り、1つのディスプレイで動かしてます(笑)

要素を付け足していくと、スペックが足りず、
結局最初に言ったゲームセンターのようなスタイルは実現できませんでした。

グラフィックボードはこれです。

ちょうど一年前は新品でも1万円ほど安かったのですが、、、

スペック次第で可能です。


まぁ、これが最初の課題ですね。

一つの記事を書くのに時間かけすぎました笑

学祭とかで展示したい高校生とか大学生とかいると思うので、
参考になるといいです。
スポンサーサイト

コメント

非公開コメント

Remy

性別:男
趣味:映画・ドラマ
職業:大学生

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。