1. 程式人生 > >Unity 模仿官方例子 點選時新增爆炸力

Unity 模仿官方例子 點選時新增爆炸力

這裡需要有一些爆炸的粒子特效,如果大家沒有的話,我會打包在專案中,這是我在網上下載的一些特效,裡面有很多特效,我就只用了其中一個來做測試。
爆炸特效的路徑在:Assert–>JMO Assert–>WarFX–>Explosions

首先建立好一個3D專案,做出如下類似的場景。
這裡寫圖片描述

注意:需要給立方體新增Rigidbody(剛體)元件,不然沒有效果。

給攝像機新增一個Boom指令碼,編輯如下:

using UnityEngine;
using System.Collections;

public class Boom : MonoBehaviour {
    public
float radius = 10f; //定義一個要新增爆炸力的半徑 public float power = 600f; //定義一個爆炸力 public GameObject particle; //得到播放粒子特效的物體 // Update is called once per frame void Update () { //當左鍵按下時 if (Input.GetMouseButtonDown(0)) { //Camera.main:得到主攝像機 //Input.mousePosition:得到滑鼠現在的位置
//我的理解是從主攝像機到滑鼠現在的點發射一條射線 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //光線投射碰撞 RaycastHit hit; //函式是對射線碰撞的檢測,當碰撞到物體時,返回一個碰撞資訊 if (Physics.Raycast(ray, out hit)) { Vector3 point = hit.point;//得到碰撞點的座標
//例項化出這個物體 Instantiate(particle, point, Quaternion.identity); //Physics.OverlapSphere():球體投射,給定一個球心和半徑,返回球體投射到的物體的碰撞器 Collider[] colliders = Physics.OverlapSphere(point, radius); foreach (Collider hits in colliders) //遍歷碰撞器陣列 { //如果這個物體有剛體元件 if (hits.GetComponent<Rigidbody>()) { //給定爆炸力大小,爆炸點,爆炸半徑 //利用剛體元件新增爆炸力AddExplosionForce hits.GetComponent<Rigidbody>().AddExplosionForce(power, point, radius); } } } } } }

在隨便給一個粒子特效新增一個Destroy指令碼,並編輯:

using UnityEngine;
using System.Collections;

public class DestroyParticle : MonoBehaviour {

    // Use this for initialization
    void Start () {
        //開啟協程
        StartCoroutine(CreateParticle());
    }

    IEnumerator CreateParticle()
    {
        //當粒子還在播放中
        while (gameObject.GetComponent<ParticleSystem>().isPlaying)
        {
            yield return null;   //條到下一幀
        }
        Destroy(gameObject);  //粒子播放結束
    }
}

注意:需要把添加了此指令碼的例子特效新增到攝像機指令碼的公有屬性 particle 中。

然後現在執行,就可以看見效果了。

這裡寫圖片描述

我的場景就在Assert目錄下,大家注意。。
本部落格用作新手學習討論,如有不好或錯誤的地方也請指出來,謝謝。