変数の数値が増えない原因が分からないです

色々な動画を参考に、モンスターを倒したときにMonster_DownCountの変数に1を足していくというノードを組んでみたものの、PrintStringでは何故かずっと1のままになってしまいます。

Blueprint Runtime Error: “Accessed None trying to read property BP_Enemy_REF”. Node: Return Node Graph: GetText Function: Get Text Blueprint: WBP_Quest_01
というエラーも出てきてしまいますが、対処法がわからず…

WBPに反映したものはIs Variableをチェックにしていますが、0のままです。

1ずつ増えたら、1、2、3…と増えていきたいです。
初心者なので簡単なミスをしているかもしれませんが、ご教示よろしくお願いいたします。

※Is Validノードを使うといいというのを見てやってみましたがそもそも自分の場合、どこにどうつければいいのか分からず、試行錯誤したものの解決することができませんでした。

▼BP

▼WBP

まず前提の確認ですが
「プレイヤーがエネミーを撃破した回数をカウントしUIに表示する」ということで間違いないですか?
その上で、動画がなにか端折って説明されていて勘違いをしたのかはわかりませんが…

その前提でお話しますが、まず質問者さんの上げているスクリーンショットからすると
こういった関係を持っていると思います

そして、BP_Enemy_01のAnyDamageの処理を順番に見ていくと
1.このアクターを削除する
2.撃破数を1つ上げる
となっています。

1の【DestroyActor】が呼ばれた時点で、BP_Enemy_01は
「俺はもう消えるから後のことは知らん」モードになります。
この後の処理は正常に動かないと思ってもらっていいです

そして2の撃破数を一つ上げる処理ですが
処理そのものは実際に増やせるため問題ないのですが、この処理がある場所が良くないです
先述した通り、後のことは知らんモードなので直後にこのMonsterDownCount変数は捨てられます

なので、AnyDamageが呼ばれた時点でこういう状態になります

この「あいつもういねーじゃん」がエラーの原因で
isValid(生存確認)を入れたほうがいいと言われる理由です
当然変数を持ってる敵が消滅したので、MonsterDownCount変数も消滅しています

ここまでが現在起きていることの説明です


ではどうすればいいかについて

敵を倒したときに変数ごと消えてしまうのが問題なので
「消えない人に変数を持っててもらう」のが良いです

あくまで一例なので誰に変数をもたせるかは色々ですが
今回はPlayerCharacterに持たせます
↓BP_ThirdPersonCharacterに記述

↓BP_Enemy_01のダメージ処理
敵が撃破されたらプレイヤーに倒されたことを教えて変数を加算してもらう

そしてWBPでプレイヤーの変数を見に行って表示します

以上が修正する一例となりますが
参考にした動画で、該当するプログラムが「どのBPに」書かれたものかを改めて確認してみてください

1 Like

お世話になっております。

教えていただいた所を修正しましたら、無事思い通りの機能になりました!

自分がどういう状況なのかも分からずだったので、一から丁寧に
教えていただきとても分かりやすかったです!!

消えてしまうactorのBPに変数を持たせてはならない…
とてもいい教訓になりました。

ありがとうございました!!