プロジェクト作成
1.新規プロジェクトを名前をJoytas19で作成する(3Dモード)
Assetインポート
1.Assets->ImportPackage->ParticleSystemsを選択する。
2.以下のように項目にチェックを入れインポート(MaterialsとTexturesは全部、PrefabsはExplosion.prefabのみ)
ステージの作成
3.Create->Cubeを作成しFloorとリネーム後インスペクターを以下のように調整する。
Cubeの作成
4.Create->Cubeを作成し、インスペクターを以下のように調整し、適当にマテリアル(表面材質)を付与する。
5.新規にCubeタグを作成し、Cubeに設定する。Rigidbodyを付与する。
6.Cubeをプレファブ化し、5つほど適当に並べる。
スクリプトの作成
7.CameraController.csを以下のように作成し、カメラにアタッチする。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraController : MonoBehaviour { public GameObject prefab; void Update () { if(Input.GetMouseButtonDown(0)){ StartCoroutine (Explosion ()); } } IEnumerator Explosion(){ yield return null; RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); if(Physics.Raycast(ray,out hit,100.0f)){ if(hit.collider.tag=="Cube"){ //当たったCubeを消す Destroy (hit.collider.gameObject); //rayとcubeと当たった地点い爆発エフェクト生成 GameObject explosion=Instantiate (prefab, hit.point, Quaternion.identity) as GameObject; //爆発あった地点から半径10の球を作成しその中に収まるコライダーを配列で取得する。 Collider[] colls = Physics.OverlapSphere (hit.point, 10.0f); //コライダー配列の走査 foreach(Collider coll in colls){ //rigidbodyの取得(なければnullが返る) Rigidbody rb = coll.GetComponent<Rigidbody> (); if(rb != null){ //リジッドボディの付いている物体には爆発力を与える(爆発力,中心,半径) //rb.AddExplosionForce (800.0f, hit.point, 10.0f); //派手にしたい場合は第4引数を与えて上に飛ばしてやる(爆発力,中心,半径,上方向に飛ばす力) //(物理的にリアルな挙動ではなくなるが派手になってゲーム向き) rb.AddExplosionForce (500.0f, hit.point, 10.0f,10.0f); } } //爆発が終わったら爆発エフェクトオブジェクトを消す,第二引数を与えて生成されて5秒後(爆発の演出が終わった後)に削除する。 Destroy (explosion, 5.0f); } } } }
8.カメラを選択し、インスペクターから最初にインポートしたExplosionプレファブを登録する。
実行
9.実行してみよう。最初の動画のように爆発して周辺の物体がふっ飛べば成功だ。
コメント