キャラクターをラグドールまたは破壊物で置き換える
Swap an intact GameObject for an instantiated destroyed prefab to switch an object to a wrecked state.
読み終わるまでの所要時間 7 分最終更新 1ヶ月前
ゲームでは、キャラクター、乗り物、建物などのアセットを無傷の状態から 壊れた状態に切り替えることがあります。ゲームオブジェクトの無傷のバージョンを変更 (スクリプトの削除や Rigidbody コンポーネントの追加など) するよりも、無傷のゲームオブジェクトを削除し、壊れたプレハブをインスタンス化して置き換える方が効率的で効果的です。
これにより様々なことが簡単にできます。壊れたバージョンに異なるマテリアルを使用したり、完全に異なるスクリプトをアタッチしたり、ばらばらに壊されたプレハブをインスタンス化したりして、元のゲームオブジェクトの壊されたバージョンをシミュレートすることができます。これらのオプションはどれも を 1 回呼び出すことで実行でき、壊れたバージョンをシーンに加え、元のバージョンを削除します。
Instantiate最も重要なことは、元のオブジェクトとは完全に異なるゲームオブジェクトを で生成し、破壊されたバージョンを作成できるということです。例えば、壊れやすいロボットを作成するには、2 つのバージョンをモデル化します。1 つはメッシュレンダラーとロボットを動かすスクリプトを持つ単一のゲームオブジェクトで構成し、もう 1 つは物理演算で個別に制御できる複数の骨格パーツで構成します。
Instantiateゲームオブジェクトを 1 つだけ持つモデルを使用すると、ゲームの実行が速くなります。モデルに含まれる三角形の数が少ないため、小さなパーツを多数持つロボットよりもレンダリングが高速になるからです。ロボットが元気に歩き回っている間はロボットを個別のパーツに分ける必要はありません。
コードを使用せずに壊れたロボットのプレハブを作成する
コードを使用せずに壊れたロボットのプレハブを作成するには 、以下の手順に従います。
-
お気に入りの 3D モデリングソフトウェアで、さまざまな骨格パーツを使ってロボットをモデリングし、Unity プロジェクトの Assets フォルダーにエクスポートします。
-
Unity エディターで空のシーンを作成します。
-
モデルを Project ウィンドウから空のシーンにドラッグします。
-
すべてのパーツを選択し、Component > Physics > Rigidbody を選んで、リジッドボディをすべてのパーツに追加します。
-
すべてのパーツを選択し、Component > Physics > Mesh Collider を選んで、すべてのパーツにコライダーを追加します (より高速なパフォーマンスのためには Convex オプションを有効にします)。
-
壊れたロボットのすべてのパーツが 1 つのルートゲームオブジェクトの子になるようにしてください。
-
追加の特殊効果を得るために、煙のパーティクルシステムを子ゲームオブジェクトとして各パーツに追加します。
-
これで、複数の爆発可能なパーツを持つロボットができました。パーツは物理演算によって制御されているため、地面に崩れ落ちることができます。各パーツは、アタッチされたパーティクルシステムによってパーティクルトレイルを作成します。
-
再生をクリックしてモデルの反応をプレビューし、必要な調整を行います。
-
ルートのゲームオブジェクトを Project ウィンドウの Assets フォルダーにドラッグして新しいプレハブを作成します。
コードを使用して壊れたロボットのプレハブを作成する
以下の例は、これらのステップをコードで表す方法を示しています。
using UnityEngine;public class WreckOnCollision : MonoBehaviour{ public GameObject wreckedVersion; void OnCollisionEnter() { Destroy(gameObject); Instantiate(wreckedVersion,transform.position,transform.rotation); }}

ロボットのプレハブが砲弾に当たったときに、壊れたプレハブとスワップされる例
これらすべてのサンプルを含むプロジェクトは、InstantiatingPrefabsExamples.zip からダウンロードできます。