BLOGブログ

2025.10.15UE5UE/ Networkその他

[UE5]Unreal Engine版のEpic Developer Assistantを試す!!

執筆バージョン: Unreal Engine 5.6.1

 

こんにちは。エンタープライズエンジニアの方井です。

本日はUE版のEpicDeveloperAssistantを試してみようと思います。

「EpicDeveloperAssistantってなによ。」そんな方もいるのではないでしょうか?
本国のUnrealFestの基調講演を見た方は、UEFN版で知っているかと思います。
もし知らず気になる方は、上に埋め込まれているEGJ公式のツイートのURLへアクセスしてみてください!
公式が提供する、UEに特化したチャット形式のアシスタントが現れると思います!

本当はUE5.7に組み込まれたWidgetとしての動作を見るべきなのですが、EDA側がUE5.6までしか対応していないようで…
本日はUE5.6.1で進めていきます。

本日作成するのは、特殊なReplicationGraphです。
前回、日本語でのReplicationiGraphでの解説が少ないと思い、このような記事を作成しました。

[UE5] ReplicationGraphを組んで、同期内容を絞る

しかしながら、今となってはEDAに訊き放題!これを利用して良い感じにGraphを組み立てることができるのか、検証していきましょう。


 

1. EDAに訊く

相手が特定のActorComponentを持つ場合は自身が操作するActorから5m以上離れるとReplicationされなくなり、持たない場合はReplicationするようなReplicationGraphおよびReplicationGraphNodeを、UE5.6に適合する形で書いて

EDAへブラウザからアクセスし、上記の命令を投稿しました。

すると、以下の文章とともに、GraphとNodeについて.hと.cppのソースコードが計4つ出力されました。
以下はUnreal Engine 5.6対応で、「特定のActorComponentを持つActorは操作Actorから5m以上離れたらReplicationしない」「持たない場合は常にReplicationする」カスタムReplicationGraphNodeとReplicationGraphの実装例です。

前回と比べると、明らかに足りていない…!!とはいえ、キモとなる実装は手に入りました。前回同様、UBasicReplicationGraphに組み入れる形で進めましょう。

 

2. 新規プロジェクト作成

UE5.6の新規プロジェクト作成画面

リスポーン地点のような安心感。いや、なんだこの見た目は?!UE5.6からTemplateが一新されたんでした。実験の分かりやすさを優先してThirdPersonTemplateを選びます。また、Replicationの処理を記述するため、C++で作成します。

こちらのプロジェクトに、EDAから得たソースコードを加えます。

 

3. ビルドが通るよう人の手を加える

先ほども説明した通りこのソースコードは足りていないものも多く、ビルドが通りません。特定のActorComponentに対する部分が架空のファイル名/クラス名になっている他、そもそもの変数や関数の使い方が誤っているところもあります。
前回を参考に各部を修正していきましょう。(完璧を求めてEDAに問い続けても良いですが、、、自分で書いた方が今は早いですね)

まず、CustomReplicationGraphNode.hです。謎のAddActor関数を取りやめ、RreplicationされるActorが追加されたときに呼ぶと規定されているNotifyAddNetworkActor関数を追加します。また、NotifyRemoveNetworkActor関数も同様に追加します。
結果、このような形になります。

続いて、CustomReplicationGraphNode.cppです。先ほど追加したNotifyAddNetworkActor関数等の定義を追加します。これらは単純にManagedActors配列の操作を行います。
GatherActorListsForConnection関数ではまず、GetNetConnection関数が見つからないとエラーになっています。単純にNetConnectionの変数を取得します。
また、Pawnが取得できない場合はPlayerControllerの位置を取得しようとしますが、AController側の処置で位置を取得できないようになっているため、elseブロック自体を削除します。
最後に、OutGatheredReplicationActorLists変数はOutGatheredReplicationListsの誤りなので、そこも修正します。
結果、このような形になります。

続いて、MyReplicationGraphですが、ちょっと足りなさすぎますね。前回のものを持ってきて、独自ノードの部分だけを入れ替えましょう。

 

4. 特定のActorComponentを作成する

今回指示したReplicationGraphは、言わば特定ActorComponentを持って離れると検知されないというものになります。
これはステルス機能があるということですね!ですので、NinjaComponentという名前で作成します。
C++で作成します。特に変更は無いためソースコードをここでは出しません

続いて、UMyReplicationGraphのInitGlobalGraphNodes関数でUMyReplicationGraph::InitGlobalGraphNodesのインスタンスを作成した際、FilterComponentClass変数にNinjaComponentを指定してください。

 

5. Ninjaアビリティを作成する

「特定のActorComponentを持った場合」というグラフを組んだ通り、Ninjaアビリティ発動でNinjaComponentを付与しようと思います。また、このアビリティは時限式で解除されるようにします。

はじめに、GameplayAbilityを親クラスにBlueprintアセットを作成します。そして、ActivateAbilityイベントで呼ばれる処理を記述します。Authorityがあれば先ほど作成したNinjaComponentを付与し、一定時間後(NinjaTime)にアビリティが終了されるようにします。

ActivateAbility時に呼ばれる処理

アビリティの設定を行います。まず、TriggersにあるAbilityTriggersはEDA_Test.Action.Ninjaを追加して、このTagがActivateされたときにアビリティが発動するようにします。
次に、TagsにあるAssetTagsは同様にEDA_Test.Action.Ninjaを追加します。

GameplayAbilityアセットの各種設定

 

6. Test用Characterを作成する

「特定のActorComponentを持った場合」というグラフを組んだ通り、アビリティを発動してActorComponentを付与されるようなPlayerCharacterを作成します。

BP_ThirdPersonCharacterを継承したCharacterクラスを作成します。そして、アビリティを扱えるようComponentsにAbilitySystemComponentを追加します。

AbilitySystemを追加する

次に、作成したNinjaアビリティをAbilitySystemに与えるため、BeginPlayからGiveAbilityノードを呼びます。

アビリティを追加する

続いて、0キーを押すことでアビリティを発動するようにします。サーバー側で発動してほしいため、Remoteだった場合はRunOnServerイベントへ飛ぶようにし、TryActivateAbilitiesByTag関数で発動トリガーであるEDA_Test.Action.Ninjaを呼びます。

0キーを押したらアビリティを発動する

最後に、追加されたNinjaComponentを削除するための関数を作成します。ActorComponentは所有者しか消すことができないため、付与される側に処理を載せます。

Componentを削除する

先ほど作成したAbilityアセットを再度開いてアビリティ終了時に呼ばれるイベントに、作成したComponent削除関数を呼び出す処理を追加します。

EndAbility時に呼ばれる処理

 

7. Test用GameModeを作成する

独自のCharacterを作成したため、GameModeにPlayerCharacterの設定を行います。

プロジェクト作成時に同時に作成されたGameModeを継承したGameModeアセットを作成し、DefaultPawnClassを先ほど作成したCharacterアセットに変更します。
そして、テストするレベルのWorldSettingsのGameModeOverrideに設定して、このGameModeが使用されるようにします。

GameModeをレベルに設定する

 

8. 試す

DedicatedServer設定でClientを2つ用意し、実際に動かしてみましょう。

0キーを押してNinja状態になり、ほかのプレイヤーから離れると見えなくなります。Ninja状態が解除されると再び同期され、正しく表示されます。遠くで時限式のステルススキルを発動して近付き、相手が気付いた時には既に格闘戦の距離、みたいな感じでしょうか。

ビルドを通して動かすための手直しがほどほどに必要でしたが、それでも仕様を伝えるだけで望むReplicationGraphをEpicDeveloperAssistantが書いてくれました!
少し難易度が高い、いちいちつらつら書いていられない複雑なものも一旦ひな形をEDAに書いてもらうことで、それをキチンとしたものに直すだけの簡単な作業になりましたね。
もちろん仕様をちゃんと定義し、EDAの出力をレビューし、キチンと直す部分は理解している人間が必要です。EDAに遅れを取らないよう、こちらもしっかり知識を最新に追いつけていきたいものです。

 

以上で、EpicDeveloperAssistantの説明は終了です。
それではアシスタントともに、良きUE生活を!!