思考が離散

そこはかとない感ただよっている。いつなくなってもおかしくない。

UE4でゲームクリアとゲームオーバーをとりあえず実装する

はじめに

とりあえずハンズオン勉強会で習ったことの復習を兼ねた記事です。

シンプルな3Dアクションゲームを想定して作っていこうと思います。

 

UE4のガチ初心者なので、バッドノウハウとかあると思います。 

手順や作業を整理して記事を書いてるわけではないので、拙い点はご容赦を。

 

何をやるのか

タイトル通り、ゲームオーバーとゲームクリアをUE4で作ってみます。

ゲームクリアとゲームオーバーのテストとして、それぞれ乗るとクリアする床と乗るとゲームオーバーする床も一緒に作りました。

 

全体観

新規プロジェクトの、「ブループリント」の中にあるThird Personを改造して作っていきます

f:id:NMMN:20160202203046p:plain

黄色く光る床がゲームクリア、黒い床がゲームオーバーです。

 ↓こんな感じ

f:id:NMMN:20160202194924p:plain

 

f:id:NMMN:20160202194954p:plain

 以下、続きを読むにて。

 

 

画面を作ろう

f:id:NMMN:20160202193505p:plain

f:id:NMMN:20160202191929p:plain

何はともあれ、ゲームクリアするにもゲームオーバーするにも画面がないと始まらないので、画面を作成しました。

ユーザーインターフェース>ウィジェットブループリントを作成し、「GameOverUI」と名前をつけています。

文字とリスタートボタンしかない極めてシンプルな画面です。

 

f:id:NMMN:20160202192855p:plain

「CLEAR!!」と書いてある文字の部分には

 Content>Text>バインドの部分に上の画像のような関数を仕込んでいます。

これで、ゲームクリアした時は「CLEAR!!」って表示するようにして、ゲームオーバーの時は「GAME OVER!!」と表示させるようにします。

変数GameOver_Textは後で参照できるように、「編集可能」にチェックを入れておきました。

この関数名をもっといい感じの名前に変えたかったんですが、どこを変えればいいのかわからず、断念。

 

f:id:NMMN:20160202193537p:plain

 リスタートボタンには再スタート処理を仕込みました。

konabe.blog.jp

 上のブログ記事の一番上のやつをそのままパクって使っています。

記事を読むと(題名の通り)Restart Game ノードを使おう。という趣旨の記事ですが、残念ながらリスタート処理はこの記事の本題では無いですし、上の画像の処理でゴリ押しすることにします。(僕の処理能力も追いついてないですし)

あとで困ったらなんかします。ごめんなさい。

 

画面ができたので、ゲームクリアとゲームオーバーを実装する

f:id:NMMN:20160202195937p:plain

f:id:NMMN:20160202195733p:plain

 ゲームクリアとゲームオーバーを実装するため、新しくGameModeブループリントを作成。その中にGameClearGameOverカスタムイベントを作成しました

いろいろゴチャゴチャつながってますが、あまり難しいことをしているわけではありません。

 

f:id:NMMN:20160202200342p:plain

ゲームクリア、ゲームオーバーそれぞれのイベントが呼ばれた時、先ほど作った画面が呼び出されるようにつなげてます。

その際、表示される文字列に値をセットしています。

 

f:id:NMMN:20160202200355p:plain

画面を呼び出す処理の後は、ゲームの入力をUIOnlyに変更。Set Game Pausedノードでゲームを止めるようにして、最後にマウスカーソルが表示されるようにしています。

 

f:id:NMMN:20160202200906p:plain

ゲームクリアとかで勝手に入力モードとかいじったので、再スタートした時に困らないよう、初期化処理を入れました。

 

 ゲームクリアとゲームオーバーをテストするための床を作る

f:id:NMMN:20160202201234p:plain

極めてテキトーにブループリント>アクターで荘厳な床と黒い床を作りました。

 

f:id:NMMN:20160202201444p:plain

金色の板にBoxコリジョン乗っけて、ライトで光らせてるだけです。

 

f:id:NMMN:20160202201503p:plain

中身はこんな感じになってます。

OnComponentBeginOverlap時に、プレイヤーが乗っていれば、GameClearイベントが呼ばれます。

GameOver床の中身もほぼ同じです。黒くなって、呼び出されるイベントがGameOverになってるだけです。

 

おしまい!

f:id:NMMN:20160202202118p:plain

 プレイしてみて、黄色い床と黒い床でそれぞれ画面がでたら成功です。

こんな複雑なことが、コーディング作業なしでできるってUE4ってすごいですね。

 

 

後記

明日はアクションゲームのギミックを作って、記事にしてみようと思います。

具体的に言うと回る床、動く床、落ちる床ですね。

(レベルの切り替えとかよくわかってないので)このままこのレベルを改変して作っていこうと思います。

わかってないこと、疑問点、懸念事項

  • GameModeがなんなのかよくわかってないまま使っている
  • 再スタートの時、もうちょっとやりようがあるはず(ありがたい記事もあるし)
  • Get_Text(0)という関数名を変えたいけれど、やり方がわからなかった

 

関係ない話ですが、はてなって一月のファイルアップロード量決まってるんですね。

もし、このまますごい勢いでゴリゴリUE4の記事書いてたらファイル利用量が足りなく可能性が微粒子レベルで存在する………??

 

 では、また。