Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What is going on with this article?
@kugipanti

Unity上で物体が衝突したら爆発する→消滅の処理

More than 3 years have passed since last update.

爆発は男のロマン

上記のとおりですが爆弾の処理はゲームオーバーや攻撃エフェクトとしては必須ですよねぇ(・∀・)

今回は物体が衝突したら爆発して、消失する処理を作ります
爆発のエフェクトは便利なAssetがあったのでそちらを使います(以下Assetへのリンク)
Simple Explosion
実はprice:0 , explosion で検索したら一発目にでてきたので使いました(;´∀`)

衝突検知からの爆発

上記のAssetを使用する場合の処理の流れは以下のようになります

衝突検知 → 消失 → 爆発エフェクトの配置

のようになります(・∀・)
爆発エフェクトの配置とありますが、上記Assetには爆発エフェクトごとprefab化してくれてます
今回は以下の私の記事で作った、万有引力のものを使って実装したのでそちらのコードを載せます

惑星から万有引力を受ける物体をUnity上で実装

衝突して消失するオブジェクトの方へ以下のコードをアタッチしました

explosion.cs
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だけでよいはずです

以下のようになりました
IMAGE ALT TEXT HERE
(画像クリックで再生します)

ちなみに、タグのおかげですが、以下のように間に関係ない壁を配置すると爆発しません
IMAGE ALT TEXT HERE
(画像クリックで再生します)

記事をお読みくださってありがとうございました

12
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kugipanti
千石撫子が大好きです

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
12
Help us understand the problem. What is going on with this article?