木を切り倒す敵キャラクターを作ろうとしているのですが、どのようにBPを設定すればいいのかわかりません…。主人公が近づくと一定時間後に木が倒れる、という処理ができればいいのですが、どうしたら木が倒れるのでしょうか?
特殊なキャラなのでわかりにくかと思いますが、教えていただけると幸いです。よろしくお願いします。
「木が倒れる」と「木を倒す」が両方あってどちらが必要なのか判断が付きませんので、両方の場合を書いておきます。
木が倒れる具体的な動作は、表現方法によるので脇に置いておきますね。
木が倒れる
木の側にSphereCollisionなどを追加し、BeginOverlapイベントを使って実装します。
「木の近くに何かが来たら倒れる」場合であればこちらで良いでしょう。
木を倒す
木を倒す側のActorにLineTraceなどを実装し、その結果を使って実装します。
この場合はLineTraceの結果で取得できるActorが木のActorであるかをキャストなどで確かめる必要があります。
「何者かが木に対してアクションを行う」場合はこちらの実装のほうが良いと思います。
敵キャラクタが木を倒す、という仕様で考えてみます。
#木を切るという表現もできますがいったん後回しにしたほうが実装効率が良いと思います。
敵キャラですのでAIで移動する複数のアクタであることを想定しました。
例としてBP_EnemyというBPが敵キャラクタである、と考えます。
次に木です。
木は倒される(攻撃される)状況を判定するためのコリジョンボックスを追加しておきます。
このボックスのオーバーラップイベントからOther Actorピンを利用してBP_Enemyにキャストします。
こうすればキャストが成功した=敵キャラがボックスと重なっている、という判定ができます。
一定時間後に木が倒れるとありますので、Cast To BP_EnemyノードのTrue判定からDelayを繋げたり
木のアクタにHPを変数として作成し、敵キャラがコリジョンに重なることでHPを減らす攻撃処理を
作成して「木が倒れる」を表現すれば、大きい木なら時間がかかるとかもやりやすいですね。
その後、木が倒れていいよ、という処理ではアニメーションを利用したり、メッシュに対して
物理シミュレーションをonにすれば木が倒れてくれるようになります。
#ただし木の形状やレベルでの置き方によってはなかなか倒れなかったり、吹っ飛んでいったりしてしまいます。
#物理シミュは楽しいものですが、理想的な動きをさせるためにはある程度の試行錯誤が必要です。
なお、敵キャラや主人公キャラ、あるいは特定の武器(チェーンソーなど)など複数の要因によって
木が倒れる処理を実装したい場合、すべての対象に対してキャストを行っているとBPが肥大し、処理的にも
猥雑になってしまいます。
そういうケースであれば「木を倒すことができるアクタすべて」に対してタグをつけておき、木のコリジョン
のオーバーラップ判定でActor has Tagで見分けること(など)も可能になります。
返信が遅れてしまい、大変申し訳ございません。
また、質問の内容が曖昧であったことも、お詫び申し上げます。今回は、「木が倒れる」動作を実行したかったため、そちらのほうを参考にさせて頂きました。ありがとうございます。
返信が遅れてしまい、大変申し訳ございません。
物理シミュレートだとやはりなかなかうまくいかなかったため、今回はアニメーションを使って実行しました。ありがとうございます。