そうだ、ゲームを作ろう

現状や学んだことなど記録するブログ。間違ってたらごめんね

Destructible Mesh Componentで悩んでみた

自前で作っているゲームで手軽に隕石を破砕するようなモーションを作れないかな~?と思いまして

pafuhana1213.hatenablog.com

 

ここを参考にして2~3日うんうん悩んでました。破砕したときの破片について制御できないのか(要はもっと大きく吹き飛ばしたり、指向性を持たせたりしたい)と色々試したり調べたりした結果・・・

 

https://answers.unrealengine.com/questions/82691/most-impulses-and-forces-dont-work-on-destructible.html

 

こんなものを発見。

要はImpulseやforceを用いたような破片の制御にはDepthが必要で、UE4単体ではDepthが2つ(破壊しないか完全に破壊するか)しか用意できないので外部ツールを使用しないと実現できないよってことなのかな?

PhysXLab、Maya、3DS/Maxを使用すれば実現できるみたいだけど、ちょ~っと難易度が高そうだな。価格も高いし。(切実)

ということで今の所はできないってことが分かったのが収穫だったんですが、パラメーターをいじっているうちに分かったことが結構ありました。でもいじる場所が割とあって忘れそうなので、以下メモ。

 

 

◎弾が何発か当たったら破壊する

 

(被弾側Destructible Mesh Editorにおいて)

・Enable Impact Damageをoffにする。(onになっているとPhysicsをsimulateしているCollisionが接触した際にすぐに割れてしまう)

・Damage Thresholdを好きな値に設定する。(これが被弾側の耐久値になる)

・Flags->Accumulate Damageをonにする。(Damageを保存。累積させる設定)

 

(被弾側Blueprintにおいて)

・攻撃側のObject Typeに対してCollision ResponseをBlockにする。

・Collision EnabledをPhysics OnlyかCollision Enabledに。

 

(攻撃側Blueprintにおいて)

・被弾側のObject Typeに対してCollision ResponseをBlockにする。

・Collision EnabledをQuery OnlyかCollision Enabledに。

・こんなふうに繋げる。

f:id:wvigler:20190929002330p:plain

DamageApplyer_BP20190929

Damage Amountは被弾側のDamage Thresholdに対する攻撃力になる。

Impulse DirとImpulse Strengthは正直この場合は設定する意味ないような気がする。(でもImpulse Dirは設定しないとコンパイルが通らない)被弾側のPhysicsをonにすると何発撃ち込んでも崩れない(なぜかそのうち壊れるが)という現象が発生するのでそれと関係あるのかも。

ちなみにApply Radius Damageノードでも全く同じことができます。こっちの場合はHit LocationをHurt Originに繋げます。

 

これで撃ち込んでDamage Amountの値の累計がDamage Thresholdを上回ると破壊されます。またDestructible Mesh EditorでDamage Capを設定すると文字通りキャップを設けることができたりします。ちなみに残りのDamage Thresholdを参照したり制御する方法は(多分デフォルトのBP上では)ありません。

 

◎Destructible Mesh Editor->Damage->Advanced->Max Chunk Speedを設定すると崩れる速度をめちゃくちゃ遅くできる。(早くはできない)

 

◎Debris(破片)の制御

・Destructible Mesh Editor->Hierarchy Depth->Enable Debrisをonにする。

・Destructible Mesh Editor->Hierarchy Depth->Debris Depthを0か1にする。これでDebrisを制御することができる。これから派生するのが以下。

○破壊後に一定時間でDebrisを消去する

・Destructible Mesh Editor->Flags->Debris Timeoutをonにする。

・Debris lifetime minとDebris lifetime maxを好きに設定する。

○破壊後に一定以上元の位置から離れたDebrisを消去する

・Destructible Mesh Editor->Flags->Debris Max Separationをonにする。

・Debris max separation minとDebris max separation maxを好きに設定する。

○破壊後に一定以上Meshの中心から離れたDebrisを消去する(判定は箱型)

・Destructible Mesh Editor->Flags->Use Valid Boundsをonにする。

・Debris Boundsのminとmaxを好きに設定する。

しかしこれValid Boundsは別としてほか2つはminとmaxで設定している割にどっちも一気に消えるんですよね・・・本当にしきい値が機能しているのか不安になる。

 

他のパラメーター値についてはまだなんとも・・・Effectについてはまあ大体想像したとおりなんだろうなとは思うんですが。