しんばりん日記

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

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

攻撃を受けたら、HPを減らして、HPが0になったらDestroyする処理を作成します。

結構前に魔法作成していた際、敵側に「魔法が当たったらPrintstring」みたいな感じの処理を書いていたので、実装はそれなりに楽のはずです。

 

それでは実装していきます。

まずはEnemyBaseに...と思ったのですが、せっかくなのでこいつらのパラメーターをデータベースで管理しましょう。

 

実装方法は魔法作成と同様で、まずは[キャラクター共通の構造体]を作成。

中身はひとまず体力だけにしておきました。

今後、この中に攻撃力や移動速度などが入る予定です。

次に、[敵共通の構造体]を作成。

この中に、[キャラクター共通の構造体]を持たせます。

他にも、何を倒したか、をわかりやすくするために[名前]を追加するかもしれませんし、倒した際のスコアやらお金やらを追加するかもしれません。

とにかく、これで構造体は完成です。

これを元にしたデータベースを作成します。

f:id:sinvary:20190201010204p:plain

超適当...

 

BaseのBeginPlayにて、データベースを取得します。

今回もタグでー...と思ったのですが、そういえば魔法の当たり判定の際に、Enemyタグで判定しているのを忘れていました。

もう一つタグを設定してもいいのですが、列挙型を利用してみましょう。

 

[新規作成]→[ブループリント]から[列挙型]を選べばすぐ作成できます。

作成したら、先ほどのデータテーブルにつけた名前をコピー&ペーストで追加していきます。

はい、めんどいですね。拡張すれば、どちらかを追加したら連動してもう片方も追加される、なんてことができるかもしれませんが。

それはともかく...

作成したら、Baseに戻ります。

 

魔法の時と同様に、データテーブルを取得します。

今度は、先ほど追加した列挙型を変数に追加し、これをName型にキャストして検索します。

f:id:sinvary:20190201013010p:plain

注意すべきなのは、直接Name型にキャストするのではなく一度Stringにキャストしなくてはいけないことです。

こうしないと、ユーザー定義の名称にならないみたいですね。

とにかく、これで無事に取得することができました。

次は、ダメージ計算です。

 

ダメージ計算といっても、現状考えているのは[HP-ダメージ]なのでそこまで難しくするつもりはありません。

が、それをEnemyで作成して、Playerでも同様の処理を作成するのは面倒ですよね!ね!

なので、FunctionLibraryを使用してみましょう。

 

[新規作成]→[ブループリント]→[ブループリント関数ライブラリ]にて作成します。

f:id:sinvary:20190201014142p:plain

中身はこんな感じに作成しました。

[リファレンス渡し]にチェックをいれると、〇ではなく◇になります。

こうすることで、関数にいれた変数の値が変わってくれるようになります。

箱の中身を使っていろいろするのではなく、箱の名前を変えて使う、といったイメージですかね。

返すboolの結果は、計算した結果(ダメージ計算結果、体力が0以下なら)を返しています。

 

f:id:sinvary:20190201014533p:plain

実装箇所はこんな感じです。

inStatusParamの型は[キャラクター共通の型]にしているため、いったん分解したものを渡しています。

 

今はinDamageの値に10を入れていますが、実際は左のイベントからダメージ値をもらって、それを入れる予定です。

今回長くなっちゃったので、次回にダメージ処理を回したいと思います。

それではまた!

 

...の前に。

今回実装した列挙型の変数のプロパティをインスタンス編集可にすることで、配置後のキャラクターに個別に名前を付けることができます。

f:id:sinvary:20190201015142p:plain

こうすることで、似たような大量のアクターを作成する無駄を省くことができるかもしれませんね。

スポーン時に公開するのもいいですね。

あくまで似たような挙動するMob達なら、ある程度はまとめられそうですね。

 

それでは今度こそ、また。