Bp間の値の受け渡しについて

つい先日からUE4を使い始めたのですが、先人方にお聞きしたいことがあります。

まず、やりたいこととしては鍵を取得→(鍵があれば)門が開くといったものです。
それを実装するにあたって、

BP_鍵
近くでボタンが押される→【鍵フラグを立てる】→鍵をhiddenにする

BP_門
ボタンが押される→【鍵フラグが立っていれば】→門を開く(閉じる)

といったBPになるかと思います。そこで、【】で囲った箇所ですが、
①操作キャラにフラグを持たせる(操作キャラのフラグを設定・取得する)
②レベルBPにフラグを持たせる(レベルBPのフラグを設定・取得する)
③門にフラグを持たせる(門自身のフラグを設定し、ローカル変数として取得する?)
上記3つのうちどれが現実的なのでしょうか?
また、できればそのブループリントの書き方もご教授願います。。。

関数をレベルやキャラに追加し、それを呼び出すことで実現しようとしましたが、アクセス権がPublicなのに呼び出せず。。。
ご回答、お待ちしております。

様々な実現方法がありますが、そのレベル内だけで完結してしまうような仕組みであればレベルブループリント内に作成してしまうのがいいと思います。

操作キャラクターにフラグを持たせるのはオススメしません。キャラクターが鍵という情報に依存してしまうので、汎用的に使いにくくなってしまうからです。極力依存するものは少ない方がいいです。

ブループリントのボタンを押す仕組みはオフィシャルで配布されているプロジェクト、Content ExampleやBlueprint Offceなどに実際の例がありますので、それを参考にしてみてはいかがでしょうか?

レベルのブループリントで作ってみました。
配置したアクターを選択した状態でレベルブループリントにトリガーイベントを送るにはdetailsから
メッシュを呼び出すにはクリックで呼び出せます。

少し難易度は上がってしまいますが、次の方法もなかなかスマートだと思います。ちょっと手元でBPを組んでいる時間がないので、もしもチャレンジできたらぜひ〜

  1. BP_扉に「BP_鍵」型の変数を作成し、Editableにする(目のマークをオンにする)
  2. BP_鍵に取得されたことを示すEvent Dispatcherを作成
  3. レベルに配置したBP_扉の「BP_鍵」パラメータに、対応する鍵を設定
  4. BP_扉のBPで「BP_鍵」変数のEvent Dispatcherを受け取る処理を書く

こうすると、レベルBPを編集すること無く実現できます。この方法だと扉と鍵のペアが増えたときに楽という利点があります。今回はEvent Dispatcherで扉で鍵のイベントを受け取る方法を取りましたが、逆に鍵に扉を登録して普通に関数を呼ぶ方法もアリかと〜。

お三方、ご回答ありがとうございます!
キャラクターに持たせるのはよろしくないとの事なので、①操作キャラにフラグを持たせる というのはやめておきます。

レベルブループリントに設定するのは手軽そうですね!ずっとフラグだけを持たせて、処理自体は鍵と扉でやろうとしていたのでこの方法は思いつきませんでした(お恥ずかしい・・・)

そしてEvent Dispatcherを使用する方法、正直全然分からないです!
ですが扉は複数作る予定なので、チャレンジしてみます。
基本はEvent Dispatcherを使用する方法を試してみますが、分からない場合は再度ここで質問させていただくかもしれません。
そのときはよろしくお願いします。。。

繰り返しになりますが、皆様ご回答ありがとうございました!

うむむ・・・数時間格闘してみましたができませんでした・・・
EventDispatcherがいまいち理解できておらず・・・

>BP_扉のBPで「BP_鍵」変数のEvent Dispatcherを受け取る処理を書く
これをどなたかもう少し詳しく教えていただけないでしょうか?

うむむ・・・数時間格闘してみましたができませんでした・・・
EventDispatcherがいまいち理解できておらず・・・

>BP_扉のBPで「BP_鍵」変数のEvent Dispatcherを受け取る処理を書く
これをもう少し詳しく教えていただけないでしょうか?

簡単に書きました。たくさんの鍵がある場合、上で説明されている通りに指定すると楽です。
ドアの開閉はEventDispatcherとトグルやTIMELINEで連携するといいと思います。

お早い回答、ありがとうございます!

今は触れないため、帰ったらすぐにいじってみます!