UE5 インターフェースで武器制御の責務分離|GASP改造

※本サイトはアフィリエイト広告を利用しています。

Unreal Engine 5 を使って開発中のTPSプロジェクト「GASP-ALS」の改造進捗として、今回は「アイテム(武器)使用処理の責務分離」についてまとめます。

yossi40-100/GASP-ALS@35d1099

従来はキャラクターBP(CBP)側で直接武器を扱っていましたが、インターフェース(BPI_Item)を導入することで、コードの柔軟性と保守性を大幅に改善しました。


🎯 背景:CBP依存のEnum分岐に限界

以前の実装では、ピストルやライフルといった武器タイプごとの処理分岐Enum Switch で CBP 側に持たせていました。

しかし武器バリエーションが増えるたびに、CBP_SandboxCharacterを修正・拡張しなければならず、以下のような課題がありました:

  • CBPが武器の内部動作に深く依存
  • 武器の種類が増えるほど管理が煩雑に

🔁 改善方針:BPI_Itemによる抽象化と委譲

この課題を解決するため、CBPからアイテム(武器)使用処理を切り離し、Blueprint Interface(BPI_Item) に委譲しました。


🧱 実装詳細

✅ BPI_Item の新規関数追加

インターフェース BPI_Item に以下の3関数を定義:

  • OnStartedUseItem() : 使用し始め (旧 IA_Fireの Started)
  • OnCompletedUseItem() : 使用し終わり(旧 IA_Fire の Completed)
  • Reload() : 弾のリロード処理を想定
よっしー
よっしー

Reloadは銃系の武器前提の名前なので、SubA,SubBみたいな単純な名前に変えようかな?

これにより、武器ごとの処理実装を各BPに任せられるようになりました。


✅ BP_Gun の対応

既存の StartFire()StopFire()Reload() の実装を BPI_Item の関数として再構築

よっしー
よっしー

独自イベントからI/F定義に置き換えただけです。
「ピストル」や「ライフル」などの銃系はBP_Gunをそのまま使って問題ないです。
狙いは弓とか双眼鏡とかでも、同じI/F関数を使うことで、独自のアイテム使用に関するロジックをCBPをほとんどいじらずに実装可能にすることです。

✅ CBP_SandboxCharacter のBattleGraph変更

  • IA_Fire の入力処理を削除
    • プレイヤーからもAIと同様に StartFire() / StopFire() をコール
  • Enumによる OverlayState 分岐を廃止
    • BPI_Item の OnStartedUseItem() / OnCompletedUseItem() を直接呼び出す設計に
  • IA_ReloadReloadBullet() イベントに変更
    • BP_Gun へのキャストを廃止し、Reload() I/F 経由で処理

Before

After


よっしー
よっしー

ブループリントインターフェースは、Castも不要で、実装されてなければ無視されるだけなので、Nullチェックも不要だそうで、超スッキリかつメンテナンスフリーに。

(※ ただしC++ではNullチェック必要とのこと)

✅ CBP_RetargetPlayerBase の連携

入力アクション IA_Fire および IA_Reload に対し、前述のCBPイベント (StartFire() / StopFire() / ReloadBullet()) を呼び出す処理を追加。

これにより、入力 → CBP → インターフェース経由で武器制御、という明確な責務分離構造が確立されました。

よっしー
よっしー

RelaodBulletってタイポ。。。


🌱 効果と今後の展望

この変更により、以下のような利点が得られました:

  • 武器BPを追加してもCBPをほぼ触る必要がない
  • CBPの責務が大幅に軽減
  • AIとプレイヤーが同一の武器使用ロジックを共有可能
  • 将来的な多様な武器種・アイテム実装にも対応しやすい設計に
よっしー
よっしー

「ほぼ」と書いたのは、持ち手位置情報を変数でCBP内に持っているため、これもデータアセット化などで分離しようかな


📝 まとめ

  • CBPから武器使用処理を分離し、BPI_Itemに委譲
  • Fire/Reload の処理は各武器BPで個別対応可能に
  • OverlayStateによるEnum分岐を完全撤廃
  • 入力アクション → CBP → インターフェース → 武器BP の明確な処理フロー確立

🔧使用バージョン:Unreal Engine 5.5.4
🎮プロジェクトタイプ:GASP-ALS(改造)

ご意見・ご質問はぜひコメントやX(旧Twitter)でもお寄せください!

コメント

タイトルとURLをコピーしました