衝突して爆発
2022.12頃にStandard AssetsがAsset Storeから消えた模様
今回の内容はレポートフォルダのゲームプログラミングフォルダに
GP14.zip
として作業済みのUnityプロジェクトを置いておいた。
Standard Assets に含まれるサンプルシーンや3Dモデルやアニメーションは除外した。
必要が有ればインポートに含めておく。
以下の画像では ParticleSystems と PhysicsMaterials(物理マテリアル。反発や摩擦の設定。Colliderコンポーネントに設定できる。)を含めた。
パーティクルの発生源となるGameObjectを用意しておく。
Cylinderなどを適当にシーンに追加してコンポーネントにParticle Systemを追加する。
以下は、公式の解説に従ってParticleを設定している様子。
公式資料の記事の設定後に必要な追加作業:
Materialのテクスチャ画像が1x4の比率で4枚の画像を縦に並べたアニメーション(スプライト)用のものになっているので、一番上の1枚だけを切り出した。
更にアニメーションスプライトの設定をすればパーティクルがアニメーションするようになる。(ここでは省略)
参照: スプライトエディター(公式)
着弾後、一瞬の間をおいてパーティクルが放出されるようにコードを書いてParticle SystemをアタッチしたGameObject(以下の画像ではシリンダー)にアタッチする。
これまではコルーチンの開始コードと遅延実行用のメソッドを記述していたが、今回はUnityの独自機能Invokeを使う。
爆発したオブジェクトは Destroyメソッドでシーンから削除するが、これもDestroyの遅延実行時間を指定してパーティクルの放出が終了してから削除するようにしてある。
参照:遅延実行にはInvokeを使おう https://www.sejuku.net/blog/83762
上記のスクリプトは、なんらかのGameObjectとの衝突を検知して着火するようになっている。
動作確認のため、スクリプトをアタッチしたCylinderの上方に火種となるSphereを配置してRigidBodyを設定しておく。
シーンを再生して、衝突後に火花が散りCylinderが消えることを確認する。