イライラ棒的なゲームを作ろう!(棒じゃないけどw)

イライラ棒、いやイライラ「球」を作ろう!

仕様としては・・・

 

・マウスのドラッグ操作で球を動かす

・弾が何かにヒットしたらゲームオーバー

・ゴールに到達したらクリアー

 

~カメラの設置~

上から全体を見下ろせる位置にカメラを設置。

f:id:Free_Gamer:20180729135413p:plain

f:id:Free_Gamer:20180729135430p:plain

~プレイヤーコントローラー・ゲームモード作成~

「IraIra_Con」という名のPlayerControllerを作成。

クラスのデフォルトの詳細パネル「MouseInterface」欄の赤枠で囲った部分にチェック。

f:id:Free_Gamer:20180729135826p:plain

これでクリックイベントが有効になり、ゲーム開始時常にマウスカーソルが表示されるようになった。

 

「IraIraGameMode」という名のゲームモードを作成。

クラスのデフォルト詳細パネルの「Classes」欄の赤枠で囲った部分を変更する。

先程作成したプレイヤーコントローラー「IraIra_Con」を割り当てよう。

デフォルトポーンは、「None」で。

f:id:Free_Gamer:20180729140929p:plain

 

ワールドセッティングのGameModeに、作成したゲームモード「IraIraGameMode」を割り当てる。

f:id:Free_Gamer:20180729142107p:plain

f:id:Free_Gamer:20180729142121p:plain

 

~球の作成~

「IraIra」という名のアクタークラスのBPを作成。

コンポーネントを以下の通り。

f:id:Free_Gamer:20180729144005p:plain

ドラッグ操作するための処理

f:id:Free_Gamer:20180729142306p:plain

このアクターがクリックされたときに呼ばれるイベント「OnClicked」と、

このアクターがクリックし終わった時に呼ばれるイベント「OnReleased」を追加。

「OnClicked」は、GateノードのOpenに。

「OnReleased」は、Closeに繋げる。

f:id:Free_Gamer:20180729142510p:plain

GetHitResultUnderCursorByChannel

TraceChannel・・・カーソルのトレースチャンネル(コリジョン

HitResult・・・カーソルのヒット情報

ResultValue・・・カーソルがヒットしたかどうか

このノードは、「GetPlayerController」からじゃないと出てこない。

 

マウスカーソル位置に球を追従させたいので、HitResultを分解(BreakHitResult)し、Locationを分解(BreakVector)する。

XとYのみ自由に移動させるようにする。Zは「80」で。

理由は後程。

f:id:Free_Gamer:20180729142654p:plain

移動させる処理として、SetActorLocationを使用。

Sweepにチェックを入れるのを忘れずに。

f:id:Free_Gamer:20180729143716p:plain

 

さて、先ほどの

XとYのみ自由に移動させるようにする。Zは「80」

の理由だが、

 

例えば、Zを「0」にしたらどうなるか。

f:id:Free_Gamer:20180729144745p:plain

埋まる。

理由は、床の位置とちょうど被るから。

これは床を球とぶつからないように下げるか、球のZを「80」にすればいい。

 

今度は、以下のようにしたらどうなるだろう。

f:id:Free_Gamer:20180729145730p:plain

youtu.be

 

カメラのほうに向かって勢いよく向かってくる。

なぜなら、

カメラはワールド内のZの位置に設置している。

という事は、実際球を動かす時XとYを自由に動かせるようにしないといけない。

Zにまで移動可能にすると、Zの位置に設置してあるカメラのほうに向かってきてしまうから。

f:id:Free_Gamer:20180729150619p:plain

だから、Zにまで動かす必要が無いのだ。

f:id:Free_Gamer:20180729150858p:plain

 

何かとぶつかった時の処理

シンプル。

何かとヒットした時に、爆発エフェクトを出して、球を破壊してるだけだ。

f:id:Free_Gamer:20180729151153p:plain

 

ここで、適当にステージを組もう。

f:id:Free_Gamer:20180729163346p:plain

 

~UMGの作成~

クリアーしたときのUMG

「Clear」という名のUMGを作成。

f:id:Free_Gamer:20180729154829p:plain

「CLEAR!」というテキストを追加。

真ん中に設置。

f:id:Free_Gamer:20180729154855p:plain

 

ゲームオーバーした時のUMG

「GameOver」という名のUMGを作成。

f:id:Free_Gamer:20180729155143p:plain

先程とほとんど同じ。

f:id:Free_Gamer:20180729155236p:plain

 

ゴール位置の表示

「Goal」という名のUMGを作成。

f:id:Free_Gamer:20180729160820p:plain

先程と同じ。

f:id:Free_Gamer:20180729160831p:plain

 

 

~ゲームオーバー処理~

「IraIra」のイベントグラフに以下の処理を追加。

DestroyActorの後に、GameOverUMGを表示。

f:id:Free_Gamer:20180729155410p:plain

 

~クリアー処理~

まず、ゴールを設置。

ボックストリガーを置こう。

f:id:Free_Gamer:20180729160157p:plain

設置したボックストリガーに、コンポーネントを追加しよう。

Widgetコンポーネントを追加。

f:id:Free_Gamer:20180729160358p:plain

Widgetの詳細にある「UserInterface」欄は以下のように設定。

Space・・・Screen

WidgetClass・・・作成したUMG「Goal」を設定。

f:id:Free_Gamer:20180729160550p:plain

 

「IraIra」のイベントグラフに以下の処理を追加。

ブランチを追加し、Conditionには「Clear?」という名のBool値を繋いだ。

デフォルト値はFalseに。

f:id:Free_Gamer:20180729161435p:plain

レベルBPに以下の処理を。

レベル内に設置したボックストリガーを選択状態にしたまま、レベルBPのイベントグラフを右クリックし、

OnActorBeginOverLapを追加。

f:id:Free_Gamer:20180729162151p:plain

設置したゴール(ボックストリガー)に、「IraIra」がオーバーラップしたら、「Clear」UMGを表示し、「IraIra」BPにある「Clear」Bool値をTrueにセット。

こうすることで、ドラッグ操作による球の移動が不可能になる。

f:id:Free_Gamer:20180729161657p:plain

 

これでプレイしてみよう!

プレイ映像(死亡ラッシュ)

youtu.be

 

クリアー時

youtu.be

 

非常にシンプルだが、とりあえずゲームっぽいものはできた。

何回も死ぬ羽目になるので、リセット機能は必須かもしれないw

他にも、いろいろとステージやギミックを増やして面白くするのもいいかもしれない。

 

それではまた!^^ノシ