質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

Q&A

解決済

1回答

3396閲覧

イベントディスパッチャーが使えないシチュエーションが知りたい

Unreal_u

総合スコア6

UE4

UE4はUnreal Engine(アンリアルエンジン)の第4世代です。 UEは、Epic Gamesより開発されたゲームエンジンです。

0グッド

0クリップ

投稿2021/01/07 12:33

編集2021/01/07 13:24

以下のようなシチュエーションで、自分ではディスパッチャーがうまく扱えませんでした。

■シチュエーション
TPテンプレートで、5枚のcoinがLevel上にあるとします。
CoinはBPクラスで、イベントグラフにBeginOverlap→イベントディスパッチャー(Call)と組まれています。
ThirdPersonCharacterBPで5枚のうちどのコインとOverlapしても上記ディスパッチャーからバインドしてThirdPersonCharacterBP内でカスタムイベントを設定したいのですができません。ThirdPersonCharacterBPがレベルBPに置き換わっても同様です。

一方、ActorAとBがあって、この1対1間をイベントディスパッチャーでつなぐことはできました。

ディスパッチャーを発信する側が特定のActorではなBPである(BPをつくって複数から発信させる)ことはNGなのでしょうか。

エラーメッセージ↓
イメージ説明

BP_Coin上でのディスパッチャー
イメージ説明

PlayerCharacter上で作った変数(これが正しいのかわからないが、型の検索画面でCoinのBP名であるBP_Coinと検索)
イメージ説明

PlayerCharacterで変数BP_Coinから検索してコインの発したディスパッチャーをバインド
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MMashiro

2021/01/07 13:10

出来ないとはどのようなエラーなどが出てできないのでしょうか? スクリーンショットなどを貼っていただけるとより分かりやすいです
Unreal_u

2021/01/07 13:26

写真を追加しました。PlayerCharacter側でコインのBPを選択した変数を用意して、そこからコインが発したディスパッチャーとPlayerCharacterBP内部のイベント(GetCoinDespatcher)とバインドしています
guest

回答1

0

ベストアンサー

BP_Coinの変数が変数宣言されただけで参照を代入していないのでアクセス時に参照が無く、エラーが発生しています。
エラーが出ないようにするにはフィールド上に存在するBP_Coinを取得して代入してやる必要がありますが
恐らくコインはレベル上に複数あるものだと思われますのでこのままだとちゃんと動かないことが予想されます。

今回の用途はおそらくコイン取得時にプレイヤーに対してスコアアップを要求する、といった処理だと思われるので
ディスパッチャーの使用用途としては適切ではないと思われるので今回は無理をして使う必要はないかと思います。

ディスパッチャーは多数のオブジェクトが特定の一つのオブジェクトの状態を監視する。という場合に使用されます。
特定の一つのオブジェクトの状態が変化したら監視しているオブジェクト達に一斉に情報が伝わるという感覚です。
(監視カメラとセキュリティルームを例に例えるとセキュリティールームの電源がOFFになるとセキュリティールームがわざわざ各監視カメラに情報を伝えなくても、監視カメラは連動して電源をOFFにする、、、といったイメージです)

今回質問主さんが行われているプレイヤーが複数のコインの状態を監視するのはダメではないですが、
多の情報を一に伝えたい(ディスパッチャーと比べて情報の移動方向が逆に近い)のでディスパッチャーである必要性が薄く別の方法をお勧めします。

こういった場合はインターフェースを用いれば解決できますが、
今回はプレイヤーという特定のオブジェクトに対して情報を渡したいだけなので、愚直にCastを使用した解決法を提示します。

以下は別解

今回のやりたいことの本質はコインからThirdPersonCharacterBPの関数を呼び出したいと判断しました。

BP_CoinがOverlapしたActorをThirdPersonCharacterにCastしてThirdPersonCharacterの関数を呼び出すのが良いと思います。

文面だけだとわかりづらいかもしれませんので例の画像を用意しました
画像例だと、ThirdPersonCharacterBPにAddScoreという関数を用意し、内部ではスコア加算処理をしているものとします。

イメージ

投稿2021/01/07 14:00

編集2021/01/07 17:22
MMashiro

総合スコア2378

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Unreal_u

2021/01/07 14:13

MMashiroさん ありがとうございました!できました。そして回答の中でいろいろな疑問がすっきりしました。 稚拙な質問にも懇切丁寧にご回答いただきありがとうございます。助かりました。
MMashiro

2021/01/07 17:23 編集

改めて見返すとわかりにくい表現が多かったので書き直しました。 疑問点があればお気軽に聞いてください
Unreal_u

2021/01/08 14:15

ありがとうございます…!なんて親切なのでしょう。。。 非常に本質的な部分に触れることができて多くを学びました。 インターフェイスについてはこの件でキーワードとしては上がっていたのですが学習が足りず使いこなすには至っておりません。まずは自分で調べていきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問