HUDによるスコア表示

そもそも、かなり効率の悪いというか、理にかなわない感じのブループリントの組み方をしています。

まず、レンガのアクタのルートはデフォルトシーンルートじゃなくて、レンガそのものにしましょう。

で、レンガのアクタをどのように壊すのかが分からないですけど、おすすめはキャラクターからLineTraceByChannelを飛ばして、ヒットしたレンガにダメージを与える方法です。

LineTraceを使ったらOutHit→BrakHitResultでHitActorかなんかのピンからCastTo[CharacterBP]→True→キャラクターで用意しておいた変数「Score」に値を代入、この方法が一番おすすめです。

レンガを壊す方法はレンガのBPの方でイベントAnyDamageみたいなイベントを使ってレンガを壊すスクリプトを組んでください。



あなたのスクリプトで起こっているエラーの原因はいくつか考えられるのですが、初心者にありがちな間違いとしては、HUDくらすの変数「Pillar」に何も代入されていないというものですね。ここにPillarを代入するには基本的にはレベルブループリントを使わないといけないですし、この方法だといろいろ融通が利かないですから、Pillarからスコアを取り出そうとするのはよした方がいいです。

あと、なぜ起こっているのかわからないエラーの原因を特定するにはPrint Stringであらゆる変数に何が入っているのかを見るといいです。デバッグの基本です。

もし、レンガを壊すことのロジックになにかしがらみがあって、どうしてもスコアをレンガの方に格納しなければならないなら…それはかなり融通を利かせるのが難しいBPになるんですが…なんとかならないことはないかもしれないです。

レンガの柱を壊したらScoreが100加算されるように作ったつもりなのですが、Scoreが0のままです!
どうしたらいいでしょう??

回答ありがとうございます!返信遅れてすいません!
一応いろいろ試行錯誤してできました!もっといい方法などアドバイスがあればお願いします!
あと、レイキャストでレンガを破壊する方法を試してみたのですが、やったことのない方法だったためよくわかりませんでした・・・一応レイキャストのBPも載せておきます。

自分で解決した時の処理

自分で解決した時の処理

レイキャストのBP(未解決)

234401-


あなたがどういったゲームを作っているのかわからないですけど、今後もプレイヤーが柱にぶつかるだけで柱が壊れるという設定で行くなら、LineTraceを飛ばす必要はないです。

イベントグラフの画像はDestructibleMeshのアクタ内で組んだものです。ヒットしたら、画像のようにOtherから当たった相手を抽出し、それがプレイヤーだったら、キャストノードから画像のようにスコアを加算して、自分にダメージを与えます。
プレイヤーの方は変数「Score」を持っていればそれだけで良くて、破壊に関係したBPを組む必要はありません。スコアがいくらなのかを表示するためにPrintStringだけ行っています。



プレイ画像の左上の赤い数字を見ると、これだけでちゃんとスコアが加算されていることが分かります。(Serverだとか、スコアが0のままのやつがあったりするのは無視してください。個人的に今作っているゲームの使用の関係です。)

プレイヤーが当たるだけで壊れるという設定でよかったらこれで良いのですが、例えば「プレイヤーが降った斧に当たったら壊れる」という風にしたかったらこうはいかないです。そういう場合にLineTraceなどのノードを利用するといいです。

あ、あと、HUDのスコア表示の件ですが、これはつまり「変数:Score はプレイヤーポーン側で用意して、それを使って表示する」ということになります。破壊される「Pillar」の中に「Score」を用意するのはいい方法ではありません。