1イベントでトリガーする処理を動的に追加にする際の考え方について

UE5.1 BPのみ

現在カードゲームを作成しているのですが、
複数のカードの効果をユーザーでカスタマイズし一枚のカードとして扱う処理を、
どのように実装すべきか分からない為質問させて頂きたいです。

1.全パターンの効果処理を親クラスに持たせ子クラスで必要な関数を呼び出す
一番最初に思い付いたのですが、親クラスに全パターン実装するのはcreate時に重すぎる
と思った。

2.効果を処理する関数にIDを振りカードに関数IDのarrayを持たせる
2-1. 関数ライブラリにすべて記載する
1と同様に一つの関数ライブラリにすべてを内包するのは重いかと思った
(関数ライブラリの関数を呼び出す際に内部ではどのように呼び出されているのでしょうか?
個人的にはすべての関数がロードされた後対象の関数を呼び出すという流れなのかなと思って
いるのですが、確認方法が思いつかず。。)

2-2. 効果毎に効果を処理する関数を持ったアクター作成する
関数IDのarrayを元に対応した関数を持ったアクターを生成し処理させる
個人的にはこれが一番良いのかなと思っています。

以上に私が思いついた方法と考えを記載したのですが、あまり知識が無い為
根本的に間違っている考え方やより良い書き方などご指摘いただければ幸いです。

特定のイベントを処理するときに各カードが異なる応答をするようにしたい場合は、-blueprint-interface- を使用するだけです。

-blueprint-interface- はアクターへの単なる信号です。アクターが信号をどのように処理するかは、任意に設定できます。

お返事ありがとうございます!

私の記載文が分かりにくく申し訳ないです。
”複数のカードの効果をユーザーでカスタマイズし一枚のカードとして扱う”
という部分をゲーム起動中に動的に処理したく、
複数のカードの効果を重ねる処理を記載する際に
IFでは事前に処理を実装するという事が前提と思っているのですが、この認識はあっているでしょうか?

個人的に効果を発動するイベントはIFではなく親クラスに内包でいいと思っているのですが、
この方法だと先々で問題がしたりするでしょうか?

親クラスでアクティブ化イベントを持つことができます:)

イベントの実装が子クラスに行われる限り。

要件を正確に把握できているかわからないのですが
カードとスキルのオブジェクトを別にし、スキルのベースとなるクラスを作り、スキル1つ毎にベースクラスを親とした子クラスを作成します(カードゲームならこのクラスにイラストやテキストの情報も含めることになるのだと思います)。
カードスポーン時にスキルオブジェクトの配列を設定させます。

カードの実行時にはそのスキルオブジェクト配列をForEachしてベースクラスに作成したSkillActivate的な関数を叩いて効果の処理をする。みたいなのはダメそうですか?

お返事ありがとうございます。

2-2をそのイメージで書いていました!(読みづらく申し訳ないです。)
一点質問なのですが、DROSS_JPさんのおっしゃるスキルオブジェクトというのは
アクターを継承した自作オブジェクトという認識で間違いないでしょうか?

もし私が知らないだけで、スキルオブジェクトという事前に用意されたBP用のクラスなどが
あるのかなと思ったので教えて頂ければ幸いです。

追記:
アクターの親であるオブジェクトクラスを元にスキルオブジェクトを作ってという事でしょうか?

質問の意図としては、「カードの効果は無数にあるが、どうすればスマートに実装できるか」
ということだとして答えます

まずDROSS_JPさんの補足としては、ActorComponentというものが使えると思います
image

ActorComponentに関する説明はこの辺りを読んでもらえれば。

ざっくりいうとActorにくっつけることでActorComponentの能力を借りることができるというものです。
なので例えば「自身のライフを100回復する」効果と「相手に100ダメージを与える」というActorComponentを作りってカードActorにこの二つを取り付けてやり
image

このように効果を発動する処理を呼び出すことで、カード本体と効果を切り分けることができます
image

当然ですが、ActorComponentにはそれぞれの効果が設定されていないと動きません。

そしてさらに、ActorComponentの親クラスに効果発動のイベントなどを用意してやることで以下のように「所持しているすべての効果を発動する」という処理を組むことができます。

以上によってカード本体は「発動条件やコストなどの管理」だけを行い、効果はComponentが実行するというように分けることができます。

2 Likes

一点質問なのですが、DROSS_JPさんのおっしゃるスキルオブジェクトというのは
アクターを継承した自作オブジェクトという認識で間違いないでしょうか?

はい、自作オブジェクトを想定しています。

アクターの親であるオブジェクトクラスを元にスキルオブジェクトを作ってという事でしょうか?

ActorかActorComponentのどちらかになると思います。どちらがいいかはユースケース次第なので追加の情報が必要になると思われますが一旦LunaNelisさんご呈示の方法を試してみてください。

LunaNelisさんが細かく補足してくれておりますので私への返信不要ですのでそちら参照ください。

1 Like

お返事ありがとうございます。

ActorComponentというのがあるのですね!
記載いただいた内容で一度実装してみようと思います!

ありがとうございます!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.