はじめに
BlueprintのみでGameplayAbilitySystem(GAS)でエイムモード切替を作ってみました。
Blueprintだけでも(やや不便ですが)Abilityが作れます。
GASを使うと、Actorの外にActorの能力を書くことが出来るので、とてもスッキリします。
また、アイテムを買った時に能力を追加するなど、動的なゲームプレイ拡張にも使えそうです。
ところが、BPのみだと、ActivateAbilityはできますが、CancelAbilityなど外部からAbilityを終了させるメソッドが直接は呼び出せません。
しかし、GameplayEventを使えば、BPのみでAbilityの動作を外から変えられますので、やってみましょう。
※この記事を作成したUEのバージョンは5.3.2です
※何度かBPコンパイルとエディタ再起動が必要ですが、記事上は割愛させてください
サードパーソンテンプレートで新規プロジェクトを作ります
GASの準備
GASプラグインを有効化
エイム能力と、エイム切り替えイベントにつかう、GameplayTagを追加します
このTagによって、発動中の能力の確認ができたり、Tag指定で能力発動ができたりしてとても便利です。
プロジェクト設定
GameplayTagsから、ゲームプレイタグを管理
+ボタンを押す
ability.aimと名付けて、タグソースを選択して、新しいタグを追加
これでability.aimというGameplayTagの追加ができました
同様に、event.toggleAimというTagも追加しておきます。
GameplayAbilityブループリント作成
エイム能力を作ります!
コンテンツブラウザ右クリック→ブループリントクラス
GameplayAbility選択
ファイル名はGA_Aimにしておきます。
このファイルにエイム処理を書いていきます
GA_Aimをダブルクリックして、表示も今のうちにフルブループリントエディタにしておきます
詳細のAbilityTagsから、先程追加したaimをチェック
エイム処理を書く
エイム中は、プレイヤーキャラが以下のような状態になります
・カメラがキャラに寄って
・キャラの向きが固定になる
カメラがキャラに寄って、キャラの向きが固定になる
引き続きGA_Aimの編集処理が続きます。
GA_Aimでは、event.toggleAimイベントで、エイムモードを切り替える処理を書きます。
FlipFlop Aから、以下を書きます。
FlipFlop Bから、以下も書きます。
GA_Aim全体はこんな感じになりました。
キャラに能力を持たせて、発動
手順は以下のような感じ
・GA_Aim能力をキャラに持たせて、能力を発動
・能力発動中は、event.toggleAimイベントを受けるごとに、エイムモード切り替え
まずは能力をもたせます。
キャラのBPであるBP_ThirdPersonCharacterを開いて、
コンポーネントからAbilitySystemを追加します。
AbilitySystemをイベントグラフ上にドラッグして、
GiveAbilityノードを出して、
GiveAbilityのAbilityClassにはGA_Aimを指定して、
GiveAbilityのReturnValueから、Promote to variableを選びます
変数名はAimAbilityHandleとしました。
実行ピンを以下のように繋ぎます。
これでキャラにAim能力が付与されました。
つぎはエイムの切り替え処理を書きます
手順は以下のような感じ
・EnhancedInputSystemでevent.toggleAimというGameplayEventを投げる
・event.toggleAimを受け取ったら、エイムモードを切り替える
まずはEnhancedInputSystemようのアセット作成します。
コンテンツブラウザで、右クリック、入力、入力アクション
名前はIA_ToggleAimとします
コンテンツブラウザで、右クリック、入力、入力マッピングコンテキスト
名前はIMC_Aimとします。ダブルクリックで開いて、IA_ToggleAimを左Ctrlキーとバインドします
この入力バインドを、GA_Aim能力付与と同じタイミングで付与しましょう。
BP_ThirdPersonCharacterのGA_Aimを付与した箇所で、以下のようにします。
これでキャラがIA_ToggleAimを受け取れるようになるので、エイム切り替えを行います。
以下のようにします。
これで、IA_ToggleAim入力がキャラに届いたら、event.toggleAimがGASに送られ、受け取ったGA_Aimがエイムを切り替えます。