しんばりん日記

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

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

さて、本日は敵を作ってみようと思います。

とりあえず作ってみるのは案山子的なもので。

ようは動かないけど、攻撃はあたる感じ。

 

 

昨日と同様に、敵もベースクラスを作成します。

後々にAIControllerとか持たせる予定なので、とりあえず勝手が聞きそうなCharacterクラスにて作成。

すでにスケルタルメッシュが設定されているので、適当にマネキンを設定。

これできちんと動くか確認するため、適当にコリジョン判定でログを出して

魔法をぶつけてみます。

f:id:sinvary:20190109010343p:plain

当たった瞬間Hitと表示されました!

しかし2回連続で表示...なんでだっけ...

まぁこれは追々考えるとして、ひとまず次は当たった時のタグ判定に移ります。

 

まずはタグ設定を行います。

[EnemyBase]を継承するものはすべて魔法の干渉を受ける、のであればここに書いちゃっていいんですけど...

例えば無敵の敵を作る場合...うーん、これはまぁ別に障害物として作っちゃえばいいのか...

やっぱり普通に[EnemyBase]にタグをつけます。[Enemy]ってタグで。

タグ設定は[クラスのデフォルト]→[三]→[Actor]からTagsで追加できました。

 

そしてタグで判定できたかを確認するため、一旦魔法側でタグチェックをします。

当たったアクターの所持しているタグに[Enemy]があった場合、自身を消す処理です。

f:id:sinvary:20190109011451p:plain

結果はうまくいきました。

まぁゲームを作成する意味ではまったく意味のない処理なんですけどね!

魔法(側)が「敵に当たったから俺消えますね!」というのは...

(正確にはダメージを与えたことを相手に通知していないのがダメかなぁ...)

 

これをもうちょっとだけゲームっぽくなる?ように修正します。

それにはイベントディスパッチャーを使用します。

 

f:id:sinvary:20190109012326p:plain

というわけで適当に作成。

こちらはEnemyBaseに作成しました。

他BPからダメージを与えたよ!とイベントを発行してもらい、OnDamageDispが呼ばれる仕組みとなります。

なので魔法側も少し変更しました。(ついでにこの処理をBaseに移動)

f:id:sinvary:20190109012901p:plain

タグがあっていた場合、キャストをしてイベントを呼び出す...みたいな。

これで実行することで、[Damage]と表示されるようになりました。

正直Castした時点でTagチェックはいらないですね。

プレイヤー、敵含め、CharacterBaseを作ってOnDamageを作ったほうがいいのかな...

まぁいっか。

 

ちなみに、この状態でEnemyBaseを親にして子Enemyを作成した場合、

関数のオーバーライドにて先ほど作成したイベントディスパッチャーが選べるようになっています。

その場合、親(あるいは自身)のイベントが発行されたらきちんと呼ばれるようになっています。

つまり

f:id:sinvary:20190109013318p:plain

こんな感じで子BPを作成し、プレイするときちんと当たった順に表示されます。

 

本日はこんな感じで。

昨日は画像が1つしかなかったので今日は一転てんこ盛りにしてみました。

やはり画像があるほうが見栄えがよさそうですね。

明日なにしよう...