ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【ゼロからアンリアルエンジン5】㉗エル●ンリングな昇降機(エレベーター)を作ってみよう。=最終話=

目次

 

はじめに

注意

UE5Preview2の現在の情報です。

今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。

 

f:id:namiton:20220405165459p:plain

 

解説

①レベルを改造しよう

エレベーターのセットアップをする前にそれっぽいマップデザインに変更してみましょう。

 

1.エレベーター用のスペースを作る

SM_Cube5のスケールXを25にして

f:id:namiton:20220405114447p:plain

SM_Cubeを複製、スケールと位置を調整します。

f:id:namiton:20220405114710p:plain

 

2.エレベーター二階の床をUE5上でモデリングする。

モデリング用に別でメッシュを作成します。

SM_Cubeのアセットをブラウズして

f:id:namiton:20220405115929p:plain

複製します。

f:id:namiton:20220405120019p:plain

名前をSM_ElevatorFloorに変更しましょう。

f:id:namiton:20220405120104p:plain

 

エレベーターの二段目を複製して作成します。

f:id:namiton:20220405115153p:plain

StaticMeshは先ほど複製したSM_ElevatorFloorにセットしましょう。

f:id:namiton:20220405120225p:plain

 

この床にエレベータ-が通れる穴をあけます。

BP_Elevatorを仮置きしておきましょう。

f:id:namiton:20220405120446p:plain

 

穴をあける床を選択した状態でモデリングを選択します。

f:id:namiton:20220405115250p:plain

左のツールからPolyCutを選択しエレベーターが入る程度の穴をあけましょう。

f:id:namiton:20220405122230p:plain

 

3.くり抜いた床の当たり判定のセットアップ

このままだとコリジョンに当たってエレベーターに乗ったプレイヤーが押し出されるので、SM_ElevatorFloorのコリジョンを修正します。


ダブルクリックして開きましょう。

f:id:namiton:20220405121103p:plain

表示から単純なコリジョンを選択。

そうするとこのメッシュのコリジョンが表示されます。

穴が開いているところも判定があるので調整していきます。

f:id:namiton:20220405121302p:plain

コリジョンからコリジョンを取り除くを押しましょう。

f:id:namiton:20220405121758p:plain

詳細からUseComplexCollisionAsSimpleを押しましょう。

f:id:namiton:20220405121838p:plain

これで複雑な形状にあったコリジョンにセットアップされました。

保存を忘れずにしましょう。

f:id:namiton:20220405122008p:plain

レベルに戻りコリジョンプリセットをCustomにして

カメラをブロックしないように変更しましょう。

f:id:namiton:20220405145039p:plain

4.壁やライト、レバーの配置

SM_Cube5を複製して壁を作ります

f:id:namiton:20220405122654p:plain

穴をあけた床を複製して入り口を作ります。

f:id:namiton:20220405122914p:plain

f:id:namiton:20220405122953p:plain

開いた隙間を塞いでおきましょう。

f:id:namiton:20220405123123p:plain

中が真っ暗なのでPointLightを配置しておきます。

f:id:namiton:20220405123820p:plain

色や明るさなど調整しましょう。

f:id:namiton:20220405123940p:plain


エレベーターを配置して

f:id:namiton:20220405124122p:plain

エレベーターのコンポーネントEndPosを二階の床に配置します。

f:id:namiton:20220405124305p:plain

動作確認しておきましょう。

いい感じですね

f:id:namiton:20220405124422p:plain

 

呼び出し用のレバーも上と下で配置しておきましょう。

f:id:namiton:20220405125257p:plain

f:id:namiton:20220405125314p:plain

 

②エレベーターとレバーを連動させる

BP_Elevatorを開いて編集していきます。

1.レバー変数の作成と割り当て

BP_ElevatorLever型の変数を2つ作成して名前を付けましょう。

今回はアニメーションタイムラインからPlayとReverseで名づけました。

また詳細から選択できるようにインスタンス編集可能にします。

f:id:namiton:20220405125630p:plain

 

また、レベルに戻り詳細からアクタを指定しておきます。

f:id:namiton:20220405143925p:plain

 

BeginPlayの後にこれらのレバーが存在するかチェックしておきましょう。

f:id:namiton:20220405144049p:plain

 

2.BP_ElevatorLeverにイベントディスパッチャ-の追加と呼び出し

イベントディスパッチャーという機能を使ってレバーのイベントをエレベーターのイベントを叩けるようにします。

 

BP_ElevatorLeverにイベントディスパッチャー,EndLeverAnimを作成します。

f:id:namiton:20220405130808p:plain

EndLeverAnimをドラッグして呼び出すを押します。

f:id:namiton:20220405130849p:plain

Finishedにつなげます。

f:id:namiton:20220405130955p:plain

また、エレベーター側からレバーを操作できないようにするためのBool型の変数Is_DoActiveを作成します。

デフォルト値はFalseにしておきましょう。

f:id:namiton:20220405134759p:plain

そして、DoOnceの代わりにブランチに置き換えておきましょう。

f:id:namiton:20220405135229p:plain

 

3.BP_Elevatorにバインディング

BP_Elevatorを開いてイベントディスパッチャーにバインドします。

f:id:namiton:20220405131254p:plain

f:id:namiton:20220405131614p:plain

バインディング用のイベントを作成します。

f:id:namiton:20220405132359p:plain

作成したイベントをCreateEventで指定します。

これでプレイヤーがレバーを操作すると対応したイベントが呼ばれるようになりました。

f:id:namiton:20220405183153p:plain

 

レバーはプレイヤーが乗れないときにしか反応しないようにしたいため、現在のエレベーターの位置をキャッシュしておく変数Is_Play作成します。

f:id:namiton:20220405140716p:plain

デフォルト値はFalseです。

f:id:namiton:20220405140726p:plain

少し複雑に見えますがやっていることはシンプルです。

スイッチもしくはレバーの信号を受けとりキャッシュした位置に応じた挙動を行っています。

f:id:namiton:20220405140317p:plain

Finishedにはエレベーターの位置に応じてそれぞれのレバーが動かせるかどうかの変数にセットしてあげています。

f:id:namiton:20220405140538p:plain

 

 

これで基本的な実装は終わりです。

実行してエレベーターが来ていないときにレバーを押してみて動くことを確認してみてください。

f:id:namiton:20220405145424p:plain

それぞれの全体像を貼っておきます。

 

▼BP_Elevator

f:id:namiton:20220405141205p:plain

f:id:namiton:20220405141235p:plain

f:id:namiton:20220405141253p:plain

f:id:namiton:20220405141312p:plain

f:id:namiton:20220405141321p:plain

f:id:namiton:20220405141346p:plain

f:id:namiton:20220405141452p:plain

 

▼BP_ElevatorLever

f:id:namiton:20220405141844p:plain

 

③マテリアルをそれっぽくしてみる。

1.QuixelBridgeから素材の入手

Quixelの高品質なアセットを試しに使ってみたいと思います。

ウィンドウからQuixelBridgeを開き

f:id:namiton:20220405160112p:plain

マンホールで検索します。

f:id:namiton:20220405160214p:plain

今回はこのマテリアルを使わせていただきます。

f:id:namiton:20220405161047p:plain

サインインすれば使えるようになるので

任意のアカウントでサインインします。

f:id:namiton:20220405160254p:plain

 

2.マテリアルの作成と適応

ダウンロードが完了したらマテリアルM_Elevatorを作成します。

この3枚のテクスチャをマテリアルにドラッグアンドドロップしましょう。

f:id:namiton:20220405162125p:plain

そうしたら画像のようにノードを組みます。

f:id:namiton:20220405162455p:plain

f:id:namiton:20220405164633p:plain



マテリアルインスタンスを作成して

f:id:namiton:20220405162601p:plain

SM_Bodyに適応します。

f:id:namiton:20220405162635p:plain

見た目がいい感じになりましたね

f:id:namiton:20220405162726p:plain


3.DynamicMaterialInstanceを使って乗ったら光らせよう

 

使い方の詳細は以前解説してます。

 

namiton.hatenablog.jp

 

サクッと作っていきましょう。

BP_Elevatorを開きBeginPlayからマテリアルインスタンスを作成。キャッシュします。

f:id:namiton:20220405163317p:plain

MoveAnimationに新しくカーブを作成します。

f:id:namiton:20220405163521p:plain

f:id:namiton:20220405163712p:plain

 

タイムラインの値からマテリアルの変数を制御します。

f:id:namiton:20220405183506p:plain

また、Emissiveが強すぎる感じがあったので調整用の変数を作成しました。

f:id:namiton:20220405165208p:plain

完成!お疲れ様でした

f:id:namiton:20220405165459p:plain

 

追加:呼び出し用のレバーははじめから操作できるようにするためセットノードを追加しておきましょう。

f:id:namiton:20220412144805p:plain

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。