【Unreal Engine5】初めてのゲーム開発 <第2回> ~面ごとに色を変更するキューブ集合体を作る

前回はCUBE型のブロックを自動で動かすところまで。
今回はそのCUBEブロックに対して、プレイヤーのアクションをトリガーとして変化させる部分をやっていきたいと思います。

使用しているバージョン

Unreal Engine 5.3.2

目次

ステップ① 素体となるキューブを作成

前回の復習になります。
Myblueprintフォルダ(なんでもいい)の下にstepfloor3のactor型ブループリントを作成しました。

拡大を4.0/4.0/4.0(今回は大きめに)
マテリアルをM_Basic_wall

あとはデフォルト

ステップ② プレイヤーが触れる時の判定

アクタに触れた時の判定は、コンポーネントでそのアクタを選択した際に、右の詳細ウィンドウの下の方にイベントとしてまとまっています。


今後も使用する機会が多そうなので、1個1個見ていきます。

《cube選択時に利用可能なイベント》

On Component Hit
On Component Begin Overlap
On Componet End Overlap
On Component Wake
On Component Sleep
On Component Physics State Changed
On Begin Cursor Over
On End Cursor Over
On Clicked
On Released
On Input Touch Begin
On Input Touch End
On Input Touch Enter
On Input Touch Leave
Physics Bolume Changed
On Component Activated
On Component Deactivated

打ち込むのが面倒だったので、UE5の説明文のスクショ(手抜き)。

ざっと説明を見る限り
On Component Hit:衝突(HIT)判定でイベント発生
On Component Begin Overlap:要素が重なる(オーバーラップ)時にイベント発生

このどちらで実装するかですが、今回のケースの場合 On Component Hit が適しています。
Overlapは名前のイメージ通り重なった状態を示します

新規アクタをキューブで作った場合、設定されているコリジョンプリセットがBlockAllDynamicとなっており、ぶつかってもOverlapの判定が発生しない。

On Component Begin Overlapは処理が動かない

On Component Hitは処理が動く

On Component Begin Overlapを使う場合は

対象のコリジョンプリセットをOverlapAllなどの重複可のものにするか

対象のアクタを覆うようにBox Collisionを配置して、それに対してOn Component Begin Overlapをかける


今回は単純にOn Component Hitを使ってみます。

ステップ③ 触れると光るcubeを作成

a.輝くエフェクトのmaterialを作成

第1回の「マテリアルの作成」で黄色いmaterialを作りましたが、今回はそれを光らせます。

作業フォルダで右クリックメニューの基本アセットを作成から「マテリアル」を選択

マテリアルグラフ画面で適当な場所に右クリックメニューから「VectorParameter」を作成

作成した「VectorParameter」の一番上のピンをメインマテリアルノード(最初に配置されているノード)のベースカラーと接続。
Default Valueの右の色UIから希望の色を選択。

さらに同じピンから、今度はメインマテリアルノードのエミッシブカラーと接続するのですが、途中にMultiplayでエミッシブの強度を乗算変更すると明度を設定できるようになります。
Bの値(強度)を変更すると、輝き方が変化。

強度1(またはmultiply未使用)

強度5

強度100

b.On Component Hitで、触れると光るようにする

先ほどは「print string」で文字を出力しましたが、今度はSet Materialで触れた時にターゲット(cube)のMaterialをM_Basic_wall2(aで作ったもの)に変更します。

動かしてみると

とりあえず色変更は成功。

ステップ④ 触れる度に色のON/OFF

内容に入る前に、この章で使用するMaterialに関して名前を変更しました。

1,2,3とかではイメージしづらいと思うので、M__block_XXXXに統一。
章で呼ぶときはXXXXの部分だけ呼称。

たたき台の色変更のイベントグラフは以下

触ったらcube(対象)の色をlightgreenに変える、というだけ。

これに、今回は2回目に元に戻る処理を入れます。

ヒット判定→対象のマテリアルが白なら緑、緑なら白に変更。

《実行結果》

動くこともあれば動かないこともある(失敗)。
以前print stringでhit判定を出力した時から予想はしていましたが、連続で処理が入ってしまっている
連続で処理が走らないような処理にする必要がある。

というわけで以下のように改善

追加したのは以下の2か所

Do Onceでヒット判定は1回だけしか行わない。
リセット信号を受信したら再度行えるようになる。

Delayで次の処理を一定時間待つ。
つまり、全ての処理を終えてから1秒後に、Do Onceをリセットしてまた処理を行えるようにする。

《実行テスト》

なんとか動作するようになりました。
delayの値は調整する必要がありますが、触ると色が変わるcubeに。

ステップ⑤ 触れた面の色が変化するキューブ集合体を作成

もっと簡単な方法ありそうとは思いながら、結局は力業で。
何か違う感が…

6つのアクタで1つのブループリントに

ほんとこれくらいしか思いつかなかった…
キューブ平べったくして、6つ繋げて大きなキューブ(BP_mass_cube)にしています。

プログラミングDIY

新たに作成したBP_mass_cubeというブループリントにsheet1~sheet6の6面の平べったい直方体を繋ぎ合わせて構成。
繋ぎ合わせてるわけではないので物理演算(重力)を関与させるとおそらくバラバラになってしまうけれど。

上の章で作成した色変えコード(イベントグラフ)とほとんど同じようなものを6個。

変更点としては
・(左上)sheetXからOn Componet Hit(Sheet1~6)の呼び出し
・(中央下)参照する対象をsheet1~6に
・Delayを0.2⇒0.5に

《実行テスト》

とりあえずはこんな感じでいいでしょうか。

6つのブロックを繋いでるだけなので、境目の判定が適当。
最終的には別のアクタで境目を隠した方がいいですね。

今回はこのあたりで。



コメント

コメントする

目次