UIを表示させる

ゲームプレイ中に表示されるUIを作成する。

1. ウィジェットを作成

[User Interface > Widget Blueprint]から「User Widget」を継承したウィジェットを作成し、「UIW_GamePlay」と命名する。

2. UIのデザインを作成

「UIW_GamePlay」を開く。

Canvasの設置

[PANEL > Canvas Panel] をドラッグアンドドロップし、その中にUI画面を作成していく。

Boderの設置

GridPanelやテキストなどのウィジェットの親としてBoderを設置すると便利。
Boderはウィジェットを一つ格納でき、色・テクスチャ・マテリアルで見た目を変更できる。


3. テキストを動的に変更する

「Text_PrincessState」の値を動的に変更させるようにする。
Hierarchyで「Text_PrincessState」を選択し、Detailsで「IsValiable」にチェックを入れる。

そしてテキストを変更する関数を作成する。

そしてこの関数をテキストを変更したい所で呼び出す。


4. ウィジェットを画面上に表示する

[Actor]を継承したブループリント「BP_UIManager」を作成する。
「BP_UIManager」のEventGraphで以下のようにノードを組む。

そして、「BP_UIManager」をレベル上に配置する

4方向のヒットリアクションの出し分け

攻撃を受けた時の敵との位置関係によって前後左右のヒットリアクションを出しわける方法について。

1. コリジョンを設定する

キャラクターの武器にコリジョンを付ける。

ProjectSettingsでコリジョンのチャンネルを作成する。

武器のコリジョンを以下のように設定する。
[Generate Overlap Events] にチェックを入れ、[Collision Enable] をNo Collisionにし、[Pawn] のみOverlapにする。

プレイヤーキャラクターBPを開き、Meshのコリジョンを設定する。
[Generate Overlap Events] にチェックを入れ、[EnemyWeapon] をOverlapにする。

敵の武器とMeshのコリジョンも同様に設定する。

2. ダメージの送信を設定

プレイヤーキャラクター(もしくはそのベースクラス)のBPを開き、武器コリジョンのイベントを作成する。


3. アニメーション通知で武器コリジョンを制御

[AnimNotifyState]を継承したBP「ANS_WeaponCollision」を作成し、開く。
ReceivedNotifyBeginをオーバーライドした関数を作成し、下記のようにBPを組む。

ReceivedNotifyEndをオーバーライドした関数を作成し、下記のようにBPを組む。

キャラクター(もしくはそのベースクラス)にコリジョンをオンオフする以下のイベントを追加。

攻撃の全てのモンタージュに「ANS_WeaponCollision」を設定する。


4. ヒットリアクションの出しわけを行う

キャラクターのベースクラスに以下のようにBPを組む。


GASを使ってコンボ攻撃を実装する

GameplayAbilitySystemを使用してコンボ攻撃を実装する方法

1. プラグインを有効化

[Edit > Plugin] から「GameplayAbilities」のチェックを入れてエディタを再起動する。


2. GAの親ファイルを作成

[Blueprint]フォルダの中に[GAS]フォルダを作成する。
その中に [Blueprints > GameplayAbilityBlueprint] から [Gameplay Ability] を選択し、「GA_Combo_Base」という名前でBPを作成する。

「GA_Combo_Base」を開き、IsFirstAttack変数を作成し、下記のようにBPを組む。


3. GAの子ファイルを作成

コンテントドロワーで [GA_Combe_Base > 右クリック > Create Child Blueprint Class] からファイルを作成し、「GA_Combo_C1」と命名する。

「GA_Combo_C1」を開き、コンボ1つめのモンタージュをセットする。
また [IsFirstAttack] にチェックを入れる。

タグを作成する。
[Details > Tags > Ability Tags > Edit > Add New Gameplay Tag] から「Ability.Attack.Combo」というタグ名を入力し、「Add New Tag」をクリック。
タグ名のドットは階層を表す。これはアビリティに付ける名前となる。

次に [Activation Owned Tags] に「Ability.State.Combo_1」というタグを設定する。
これは、このアビリティが実行されている間(EndAbilityノードが実行されるまでの間)所有者に付与されるタグである。

さらに [Activitaion Blocked Tags] に「Ability.State」というタグを設定する。
これにより、「Ability.State.Combo_1」の実行中は「Ability.State.xxx」のタグを持つアビリティが実行できないようになり、連打対策になる。

※タグを編集・削除したい場合
 タグの編集・削除は [Project Settings > GameplayTags] から行う


4. キャラクターBPにアビリティを登録

コンボを実装するキャラクター(もしくはその親クラス)のBPを開く。
コンポーネントにAbilitySystemを追加する。

初期化部分(EventBeginPlayなど)に下記BPを作成。

コンパイルし、「AbilityClass」変数のDefaultValueを先ほど作成した「GA_Combo_C1」に設定する。


5. キャラクターBPでアビリティを使用する

コンボを実装するキャラクターのBPを開く。
下記のようにBPを組む(仮でPキー入力をコンボを行う)。

MakeLiteralGameplayTagContainerノードの [Edit] をクリックして「Ability.Attack.Combo」を設定する。

これでプレイしてPキー入力した時にAbility.AttackComboという名前のアビリティが実行されるようになり、コンボの1つ目の攻撃ができるようになった。


6. 2つ目のコンボを作成

「GA_Combo_C1」をコピーして「GA_Combo_C2」を作成し、開く。
2つ目の攻撃モンタージュを割り当て、[IsFirstAttack] のチェックを外す。

タグを以下のように設定する。

キャラクターBPの「AbilityClass」変数に「GA_Combo_C2」を登録する。

アニメーション通知を作成

AnimNotifyStateを継承したブループリント「ANS_ReadyAttack」を作成し、開く。

「ReceivedNotifyBegin」をオーバーライドして関数を作成し、以下のようにBPを組む。

次に「ReceivedNotifyEnd」をオーバーライドして関数を作成し、以下のようにBPを組む。

もう一つAnimNotifyStateを継承したブループリント「ANS_BranchAttack」を作成し、開く。

「ReceiveNotifyTick」をオーバーライドして関数を作成し、以下のようにBPを組む。


7. モンタージュに通知を設定

「ANS_ReadyAttack」と「ANS_BranchAttack」を追加。
「ANS_ReadyAttack」は次のコンボへ遷移する入力を取得する期間。
「ANS_BranchAttack」で実際に次のコンボへ移行する。

「ANS_ReadyAttack」の [Detail > Anim Notify > Attack Begin Tag] に「Ability.Ready.Combo_2」を設定する。



以上で、コンボ実装完了。

ブレンドスペースを用いた移動アニメーションの作成

ブレンドスペース、マルチスレッドアニメーション、レイヤーアニメーションを用いた移動アニメーションの設定。
横移動はカニ歩き、ダッシュは前方のみの移動系を想定。
キャラクターの歩行時移動速度は「300」ダッシュ時移動速度は「900」を想定。

1. ブレンドスペースを作成

2. アニメーションレイヤーを編集

前回の記事の「ALI_AnimLayer」にAnimationLayer「FullBody_MoveState」を追加する。

3. アニメーションブループリントを設定

前回の記事の「ABP_CharacterBase」をベースに編集していく。

「UpdateVelocity」関数に変数「MoveSpeed」と「MoveRight」の設定を追記する。

「SetUpMoveAnim」という関数を新規作成し、以下のように設定。

ステートマシンを以下のように設定。
IdleとMove間の遷移条件はBool型のHasVelocityの値で定義。

「Move」ステートを開き、[MyBlueprint] > [ANIMATION LAYERS] > [Full Body Move State] ドラッグアンドドロップしてつなげる。

「FullBody_MoveState」を開き、以下のように設定する。
「BlendspacePlayer」の [Details] > [Settings] > [BlendSpace] は「Bind」から「Dynamic」に変更しておく

4. 派生クラスでブレンドスペースを指定

「ABP_CharacterBase」の派生クラスで [Class Defaults] > [Details] > [Default] > [Move Blend Space] に作成した移動用ブレンドスペースを設定する。

ボタン

UE5でボタンのUIを作成する方法のメモ。

1. ファイルを作成

WidgetBlueprintを作成する。

2. UIのレイアウトを作成

WidgetBlueprintを開き、[Canvas Panel]を配置し、その上に[Button]を配置する。

3. UIを生成する

LevelBlueprintでUIを生成するようにする。

4. ボタン押下時の挙動を定義する

ボタンを選択した状態で [Details] > [Events] > [On Clicked] > [+] を押し、ボタン押下時の挙動を定義する。