攻撃してみる:魔法作成(2)
さて、本日は敵を作ってみようと思います。
とりあえず作ってみるのは案山子的なもので。
ようは動かないけど、攻撃はあたる感じ。
昨日と同様に、敵もベースクラスを作成します。
後々にAIControllerとか持たせる予定なので、とりあえず勝手が聞きそうなCharacterクラスにて作成。
すでにスケルタルメッシュが設定されているので、適当にマネキンを設定。
これできちんと動くか確認するため、適当にコリジョン判定でログを出して
魔法をぶつけてみます。
当たった瞬間Hitと表示されました!
しかし2回連続で表示...なんでだっけ...
まぁこれは追々考えるとして、ひとまず次は当たった時のタグ判定に移ります。
まずはタグ設定を行います。
[EnemyBase]を継承するものはすべて魔法の干渉を受ける、のであればここに書いちゃっていいんですけど...
例えば無敵の敵を作る場合...うーん、これはまぁ別に障害物として作っちゃえばいいのか...
やっぱり普通に[EnemyBase]にタグをつけます。[Enemy]ってタグで。
タグ設定は[クラスのデフォルト]→[三]→[Actor]からTagsで追加できました。
そしてタグで判定できたかを確認するため、一旦魔法側でタグチェックをします。
当たったアクターの所持しているタグに[Enemy]があった場合、自身を消す処理です。
結果はうまくいきました。
まぁゲームを作成する意味ではまったく意味のない処理なんですけどね!
魔法(側)が「敵に当たったから俺消えますね!」というのは...
(正確にはダメージを与えたことを相手に通知していないのがダメかなぁ...)
これをもうちょっとだけゲームっぽくなる?ように修正します。
それにはイベントディスパッチャーを使用します。
というわけで適当に作成。
こちらはEnemyBaseに作成しました。
他BPからダメージを与えたよ!とイベントを発行してもらい、OnDamageDispが呼ばれる仕組みとなります。
なので魔法側も少し変更しました。(ついでにこの処理をBaseに移動)
タグがあっていた場合、キャストをしてイベントを呼び出す...みたいな。
これで実行することで、[Damage]と表示されるようになりました。
正直Castした時点でTagチェックはいらないですね。
プレイヤー、敵含め、CharacterBaseを作ってOnDamageを作ったほうがいいのかな...
まぁいっか。
ちなみに、この状態でEnemyBaseを親にして子Enemyを作成した場合、
関数のオーバーライドにて先ほど作成したイベントディスパッチャーが選べるようになっています。
その場合、親(あるいは自身)のイベントが発行されたらきちんと呼ばれるようになっています。
つまり
こんな感じで子BPを作成し、プレイするときちんと当たった順に表示されます。
本日はこんな感じで。
昨日は画像が1つしかなかったので今日は一転てんこ盛りにしてみました。
やはり画像があるほうが見栄えがよさそうですね。
明日なにしよう...