1. 程式人生 > >Unity 2D炸彈爆炸的效果製作

Unity 2D炸彈爆炸的效果製作

最近在做一個打磚塊的遊戲,其實遇到發射炸彈,然後炸掉一個範圍內的物體的問題。

現在將我的做法記錄下來,以備日後使用。

using UnityEngine;
using System.Collections;

public class BombControl : MonoBehaviour {

	public GameObject explosion;//爆炸效果的引用,這裡我用的是從網上下載的Prefab
	public float radius=3F;//爆炸範圍的半徑

	// Use this for initialization
	void Start () {

	}
	
	// Update is called once per frame
	void Update () {
		//如果炸彈沒爆炸,則當炸彈的位置低於-4的時候,自動銷燬炸彈
		if (this.gameObject.transform.position.y < -4) {
			Destroy(this.gameObject);
		}
	}

	void OnCollisionEnter2D(Collision2D col){
		string tag = col.gameObject.tag;
		//如果炸彈撞到磚塊(這裡我將磚塊分為block_general,block_reward,block_move,block_firm)或者牆體(TopWall,Wall)
		if (tag == "block_fixed" || tag == "block_general" || tag == "block_reward" || tag == "block_move" || tag == "block_firm" || tag=="TopWall" || tag=="Wall") {
			//例項化一個爆炸效果
			Instantiate(explosion,gameObject.transform.position,Quaternion.identity);
			//獲得以炸彈為中心的一定範圍內的所有物件
			Collider2D[] colliders= Physics2D.OverlapCircleAll(gameObject.transform.position,radius);
			//如果炸彈碰到的是磚塊,則銷燬磚塊
			foreach(Collider2D collider in colliders){
				string co_tag=collider.gameObject.tag;
				if(co_tag == "block_fixed" || co_tag == "block_general" || co_tag == "block_reward" || co_tag == "block_move" || co_tag == "block_firm"){
					Destroy(collider.gameObject);
				}
			}
			//最後銷燬炸彈本身
			Destroy(this.gameObject);
		}

	}
}