##爆発は男のロマン
上記のとおりですが爆弾の処理はゲームオーバーや攻撃エフェクトとしては必須ですよねぇ(・∀・)
今回は物体が衝突したら爆発して、消失する処理を作ります
爆発のエフェクトは便利なAssetがあったのでそちらを使います(以下Assetへのリンク)
(Simple Explosion)
実はprice:0 , explosion で検索したら一発目にでてきたので使いました(;´∀`)
#衝突検知からの爆発
上記のAssetを使用する場合の処理の流れは以下のようになります
衝突検知 → 消失 → 爆発エフェクトの配置
のようになります(・∀・)
爆発エフェクトの配置とありますが、上記Assetには爆発エフェクトごとprefab化してくれてます
今回は以下の私の記事で作った、万有引力のものを使って実装したのでそちらのコードを載せます
衝突して消失するオブジェクトの方へ以下のコードをアタッチしました
public class rocketPower : MonoBehaviour {
Rigidbody rb;
public GameObject explode;//explodeにはunity上でprefabを関連付けます
void Start () {
rb = this.GetComponent<Rigidbody>(); //衝突時にオブジェクトを消す際に使用
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter(Collision collision) //衝突時の処理
{
//Destroy(this.gameObject);
if(collision.gameObject.tag == "Planet")
//タグで限定(他のオブジェクトに衝突した場合は呼び出さない
{
rb.isKinematic = true; //位置を固定
this.transform.localScale = Vector3.zero; //みえない大きさにする
Instantiate(explode, this.transform.position, Quaternion.identity);
//ぶつかった位置にexplodeというprefabを配置する
}
}
}
タグのif文を書いたことで他のものにぶつかっても爆発しなくなります
isKineticはそこで固定する意味があります
destroyを使うことも考えたのですが、今回ロケットの位置をカメラが参照していたのでバグが起こったので今回はコードにあるとおり、スケールで縮小とiskineticをオンにすることで解決しました
普通の物体であれば、Destroyだけでよいはずです
ちなみに、タグのおかげですが、以下のように間に関係ない壁を配置すると爆発しません
(画像クリックで再生します)
記事をお読みくださってありがとうございました