Unity5で物理演算のパフォーマンスが上がったそうなので、Cubeを破壊する奴を作成してみました。赤い玉を白い塔にぶつけて粉砕しているイメージです。
塔を破壊するために行った操作
これは非常に単純な仕組みで実現しています。要するに、CUBEを用意しておき、高い衝撃が加わった瞬間に8分割します。
さらに、作成したCUBEにも衝撃を通知しておき、閾値以上の場合は8分割…これを繰り返しているだけです。分割数はパフォーマンスと相談です(下の絵は分割しすぎて操作が帰ってきませんでした。gifの分割数が荒いのもそういうことです)
分割すればするほど衝撃に対する抵抗値が上がり粉砕されにくくする、重い物は強い、柔らかい物は衝撃が伝わりにくい、若干の工夫があります。
またUnity5でRigidbodyが高速化されましたが、それにも限度という物があります。つまり数千個のオブジェクトを同時に物理演算すると超重いので、積極的にSleepで機能を停止してもらう、粉砕可能な範囲には限度がある等、パフォーマンスチューンも必要と思われます。プロファイラで確認すれば、わかりやすい壁が見えます。
パフォーマンスチューンと言えば、このギミックに模様を書く場合は、分割数に応じてマテリアルのScaleとoffsetを変更しないと変になります。単純にマテリアルのScaleをいじるとマテリアルが複製されてbatchesが増えてしまうので、マテリアルのキャッシュやMaterialPropertyBlockを活用する必要がありそうです。
CUBE以外の物を破壊する
Cube以外、つまり複雑な形状を持つオブジェクトに対する利用ですが、形状を維持したまま分割する事が出来るなら可能です。例えば Unity上でモデルを切断するで試したアプローチやBreakable Glassで行っているようなアプローチで、オブジェクトは分割出来ます。
しかし、ゲームのようなリアルタイム性の高く芸術的な物に対して使用する場合、事前に分割したオブジェクトを並べるアプローチの方が素直なように思います。
Breakable Itemsは正にそれを行っており、事前に分割したオブジェクトと差し替える+パーティクルをばら撒く方式でブロックの破壊を表現しています。
大抵の「オブジェクトが破壊出来る」機能を持つゲームは大体コレでやっていると思います。
個人的に一番面白く思っているのは(用途は限られるが)メッシュを分割表示するFragmentumです。これは物理演算をするにはしんどいと思いますが、非常に美しくバラけています。ゲームというより演出に使えそうな感じです。
昔はWindows(DX11)専用だった気がしたのですが、試したらmacでも動いたのでビックリです。Ready for Mobileって事はモバイルでも動作するんでしょうか。
Fragmentum 2 - Deconstruction of the Epic Citadel - YouTube
オブジェクトの破壊は大抵の場合アニメーションや事前計算で行うほうが綺麗に出ると思いますが*1、物理演算で色々するアプローチも中々に面白いです。
*1:大抵の場合、物理的に正しい≒見慣れた・絵的にきれいな挙動ではありません。特にアニメや特撮・ゲームに見慣れた人の場合、上手く表現できません。見慣れたものが当人にとって最も綺麗な挙動になります