Unity 模仿官方例子 點選時新增爆炸力
阿新 • • 發佈:2019-02-06
這裡需要有一些爆炸的粒子特效,如果大家沒有的話,我會打包在專案中,這是我在網上下載的一些特效,裡面有很多特效,我就只用了其中一個來做測試。
爆炸特效的路徑在: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目錄下,大家注意。。
本部落格用作新手學習討論,如有不好或錯誤的地方也請指出來,謝謝。