回答編集履歴

1

分かりづらい表現が幾つかあったため修正、また画像を用いることでより分かりやすいように

2021/01/07 17:22

投稿

MMashiro
MMashiro

スコア2378

test CHANGED
@@ -1,33 +1,53 @@
1
- BP_Coinの変数が変数宣言されただけで参照を入てないのでアクセス時に参照が無くエラーが発生しています。
1
+ BP_Coinの変数が変数宣言されただけで参照をないのでアクセス時に参照が無くエラーが発生しています。
2
+
3
+ エラーが出ないようにするにはフィールド上に存在するBP_Coinを取得して代入してやる必要がありますが
4
+
5
+ 恐らくコインはレベル上に複数あるものだと思われますのでこのままだとちゃんと動かないことが予想されます。
2
6
 
3
7
 
4
8
 
5
- またディスパッチャー使してはやはり微妙なので今回は無理して使う必はなと思います。
9
+ 今回の用途はおそらくコイン取得時にプレイヤーに対してスコアアップを要求する、とった処理だと思われるので
6
10
 
7
- (基本的に一対多で多に対して一の情報を伝えたいときに使われるのがディスパッチャーです
11
+ ディスパッチャーの使用用途としては適切はないと思われるので今回は無理をして使う必要はないかと思いま
8
12
 
9
13
 
10
14
 
15
+ ディスパッチャーは多数のオブジェクトが特定の一つのオブジェクトの状態を監視する。という場合に使用されます。
16
+
11
- ---
17
+ 特定の一つのオブジェクトの状態が変化したら監視しているオブジェクト達に一斉に情報が伝わるという感覚です。
18
+
19
+ (監視カメラとセキュリティルームを例に例えるとセキュリティールームの電源がOFFになるとセキュリティールームがわざわざ各監視カメラに情報を伝えなくても、監視カメラは連動して電源をOFFにする、、、といったイメージです)
12
20
 
13
21
 
14
22
 
15
- コインからThirdPersonCharacterBP関数呼び出したと判断しました。
23
+ 今回質問主さんが行われているプレイヤーが複数のコインの状態監視するのはダメではなですが、
24
+
25
+ 多の情報を一に伝えたい(ディスパッチャーと比べて情報の移動方向が逆に近い)のでディスパッチャーである必要性が薄く別の方法をお勧めします。
16
26
 
17
27
 
18
28
 
19
- Overlap時しActorThirdPersonCharacterにCastしてThirdPersonCharacterの関数を呼び出すのが良と思います
29
+ こういっ場合はインターフェースれば解決できますが、
20
30
 
21
- (ThirdPersonCharacterのScoreUpdate呼び出したりなどで
31
+ 今回はプレイヤーという特定のオブジェクトに対して情報を渡したいだけなので、愚直にCastを使用した解決法を提示しま
22
32
 
23
33
 
24
34
 
25
- イメージがつきにくいかもしれませんが処理の流れは以下の通りです
35
+ ## 以下は別解
26
36
 
27
37
 
28
38
 
29
- CoinBPOverlap → Other ActorをThirdPersonCharacterへCast → ThirdPersonCharacterの関数を呼び出
39
+ 今回やりたいことの本質はコインからThirdPersonCharacterBPの関数を呼び出したいと判断しました。
30
40
 
31
41
 
32
42
 
43
+ BP_CoinがOverlapしたActorをThirdPersonCharacterにCastしてThirdPersonCharacterの関数を呼び出すのが良いと思います。
44
+
45
+
46
+
33
- わから場合は捕捉などでどこがわらないか追記てください。
47
+ 文面だけだとわかりづらいかれませんので例の画像を用意しました
48
+
49
+ 画像例だと、ThirdPersonCharacterBPにAddScoreという関数を用意し、内部ではスコア加算処理をしているものとします。
50
+
51
+
52
+
53
+ ![イメージ](04917ec2abdedb29f1dba9e666b2a8fd.jpeg)