執筆バージョン: Unreal Engine 5.6
|
こんにちは!
UE5.6で「ThirdPerson」テンプレートのVariantsオプション「Combat」が追加されました。 今回は、初心者向けに少しだけ改造して遊んでみます。
テンプレートの仕組みを理解すれば、自分のゲーム製作にも生かせることがきっとあるはずです!
プロジェクトを作ろう!
「ThirdPerson」テンプレートを使用して、任意の名前でプロジェクトを新規作成します。
Variantsオプション「Combat」の選択を忘れないようにしましょう。

プレイしてみよう!
プロジェクトが開いたら、[Content] > [Variant_Combat] にある「Lvl_Combat」を開きます。
そのままプレイしてみましょう。
「マウス左クリック」か「ゲームパッドRBボタン」で攻撃。 なんと、3連コンボをすることができます! 
「マウス右クリック」か「ゲームパッドRTボタン」でチャージ攻撃。 
近づくと自動的に開く扉。 
攻撃できるオブジェクト。 
奥に行くと敵がスポーンして、戦うことができます。 
敵も攻撃してきて、当たるとダメージを受けます。 
敵に倒されるとリスポーンします。 
機能が盛りだくさんですね!
機能を追加しよう!
今回は、敵を倒した時に経験値を獲得して プレイヤーの体力と攻撃力が増加するようにしていきます。
①敵を倒した通知を受け取る
まず、敵を倒したことをプレイヤーキャラクターが知ることができないといけません。 敵を倒してしばらく待つと敵がリスポーンするため、既に実装されている仕組みが使えそうです。
レベル上の BP_Combat_EnemySpawner を選択し、Ctrl+Eキーを押して編集画面を開きます。

どうやら、この「Spawn Enemy」というカスタムイベントで、敵をスポーンした際に「BP_CombatEnemy」のイベントディスパッチャー「On Enemy Died」をバインドすることで、敵が倒された時に通知を受け取れるようになっているようです。

このイベントディスパッチャーを流用して、プレイヤー(BP_CombatCharacter)でも通知を受け取れるようにしてみましょう。
[Content] > [Variant_Combat] > [Blueprints] の「BP_CombatCharacter」をダブルクリックして編集画面を開きます。 イベントグラフの空いているところにカスタムイベント「Defeat Enemy」を追加します。 処理が通ったことが分かるようにPrint Stringを繋いでおきましょう。 
続いて、攻撃時の処理を確認します。 「Do Attack Trace」というインターフェースイベントの以下の部分が該当しそうです。

今回、攻撃を与えた敵の通知を受け取りたいので 以下のように処理を追加します。

「Apply Damge」ノードの前に「On Enemy Died」をバインドします。 「Apply Damge」ノードの後ろに追加してしまうと、一撃で敵を倒した時に通知されなくなってしまうので注意しましょう。
バインドノードには先ほど作成したカスタムイベント「Defeat Enemy」を繋ぎます。 一度テストしてみましょう。

上手く動いてくれました!
②レベルアップでステータスを変化させる
レベルアップしてステータスが変化する仕組みを追加していきましょう。 以下2つの変数を追加します。
- Integer型の「Lv」 ※初期値「1」
- Float型の「Required Exp」

構造体「ST_PlayerStatus」を作成します。 以下3つの変数を追加しておきます。
- Float型の「Required Exp」
- Float型の「Max HP」
- Float型の「Melee Damage」

先ほど作成した構造体を使用してデータテーブル「DT_PlayerStatus」を作成します。 それぞれ自由にパラメーターを設定しましょう。
- RowName:レベル
- Required Exp:次のレベルまでの必要経験値
- Max HP:最大HP
- Melee Damage:1発の攻撃力

「BP_CombatCharacter」に戻り、関数「Set Player Status」を作成します。

現在のレベルに応じた各変数の情報をキャラクター側の変数にセットする関数です。 「Max HP」「Melee Damage」は「BP_CombatCharacter」に元々用意されている変数になります。

イベントグラフに戻り、カスタムイベント「Level Up」を追加します。 先ほど用意した関数「Set Player Status」と既存のカスタムイベント「Reset HP」を繋ぎましょう。

レベル1の時のHPを変更した場合も反映されるように、「BeginPlay」の処理を変更して関数「Set Player Status」を呼び出すようにします。

「Defeat Enemy」に以下の処理を追加しましょう。 敵を足すたびに経験値「1」を得て、「Required Exp」分の経験値を得たら「Lv」を1上げて、カスタムイベント「Level Up」を呼び出します。

一通りの実装が完了しました。 プレイしてみましょう!

敵を倒してレベルアップしたため、攻撃力が上がって3発で敵を倒せるようになりました!
おまけ
デフォルトのままだと敵の出現数が少ないです。 レベル上の「BP_EnemySpawner」の詳細欄から「Spawn Count」を変更すれば増やすことができます。
