しんばりん日記

ue4を使ってのゲーム制作ブログです。間違いを指摘していただけると助かります!

攻撃してみる:魔法作成(8)

前回の続きからで、ダメージ値を受け取るところですね。

当たったらメッセージを表示していた、のイベント通知に値を持たせてみよう、という感じです。

 

まずはダメージを受ける側から実装してみましょう。

f:id:sinvary:20190205011156p:plain

といっても、以前作成したEnemyBaseのイベントディスパッチャーのインプットにintを追加しただけですが。

これを、ダメージ計算関数に渡せば受け取り側は完成です。

 

次に、ダメージを渡す側として魔法BPを久しぶりに編集しましょう。

というわけで、これも以前に作成したDataBaseを使用するわけですが...

そういえばこのデータベースをどこかで使用していましたが忘れてしまいました...

なのでリファレンスビュワーで確認します。

f:id:sinvary:20190205011731p:plain

確認することができました。あぁ、IceMagicでしたね、そういえば。

[左]が[右]を参照している、とみてもらって間違いないと思います。多分。

ちなみに、中央が読み込まれた時点で右側も読み込まれるみたいですね。

なので、できる限りリファレンスビュワーで確認する際のつながりは少ないほうがいいみたいです。

 

さて、IceMagicBPではBeginPlay時に自身のレベルに応じて、データテーブルからステータスを引っ張り、それを保持していたようですね。

これをFireMagicでも同じことをします。

 

f:id:sinvary:20190205012220p:plain

それをMagicBase側にて、Enemyタグに当たった場合ダメージ値を相手に与えるようにします。

一応はこれで完成です。

現状だとデータテーブルの値は氷も炎もダメージ値が100だったので、片方を変えてみたりレベルごとに変えてみたりするとはっきりとわかるかと思います。

 

ただ...BlueprintFunctionの簡易ダメージ計算関数がうまく働いていないようですね...

自身のHP(100) - ダメージ値(50)なのに結果が0...二回来ているようには見えないし...

といろいろやって思い出しました。ひとまず、こうしました。

f:id:sinvary:20190205013139p:plain

このノードでつながっている限り、同じ[入れ物]なんだってことをすっかり忘れていました。

つまり、前回までのままだと

f:id:sinvary:20190205013501p:plain

赤丸の箇所を参照するたびに計算式が行われていたということですね...

文章で書くと、

1:構造体とダメージ値を持ってきて、HP-ダメージ値の結果を構造体にいれる

2:更新された構造体の値とダメージ値を再度計算し、その結果を返す

という流れになっていました。

今回の修正は計算結果を別の入れ物に入れることで、何度も計算することを防ぎました。

まぁリファレンス参照しなければいいだけではあるんですが。

 

もちろん、これが便利な場合もありますが、今回は意図していない挙動だったため、修正をしました。

 

ひとまず今回はここまでで。

次回は...何しようかな。

連打すると今バグるのでそれの修正にしようと思います。

あとは魔法のバリエーションの追加ですかね。

散弾とホーミングいれたい。では、また。