FTP遊戲之爆炸效果實現

上一篇文章已經跟大家分享了扔手雷的功能實現,

代碼律動:吃雞實戰之破片手榴彈?

zhuanlan.zhihu.com圖標

那麼這一篇文章就來寫扔玩手雷之後的爆炸效果,先來看一下實現的效果.

可以發現物體的受力根據離爆炸源中心的距離來決定,這就比較符合我們的爆炸物理模型了,那麼我們就把這個效果定下來,接下來就來講解一下如何實現這個效果.,

首先創建幾個3Dobject,具體長什麼樣子看自己喜歡,

然後給他們添加一個剛體跟碰撞器,

這樣就可以了,接下來寫個方法,在手雷爆炸的時候調用,

void Boom() { //這裡的transform即手雷本身. Collider[] _boomObj = Physics.OverlapSphere(transform.position, 15); foreach(Collider i in _boomObj) { Rigidbody _rig = i.GetComponent<Rigidbody>(); if (_rig != null&& _rig.transform != transform) { _rig.AddExplosionForce(1500f, transform.position, 15,10f); } } }

首先先用Physics裡面相交球這個方法,取出手雷爆炸半徑內的所以帶有碰撞器的物體,

public static Collider[] OverlapSphere(Vector3 position, float radius);

Position即球的圓心,

Radius即球的範圍.

然後再去遍歷,篩選出受力的物體,(注意:遍歷時應避免閉包的影響,在這裡我定義了一個新的變數_rig 來存儲跟篩選而不是用到臨時變數 i ),最後給他們身上的剛體施加一個爆炸力即可.

這裡施加爆炸力的方法是Unity封裝好的,直接調用即可:

public void AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, [DefaultValue("0.0F")] float upwardsModifier, [DefaultValue("ForceMode.Force")] ForceMode mode);

這是一個帶有五個參數的函數,其中兩個是帶默認值的參數.

explosionForce是力的大小,

explosionPosition是施加力的位置,

explosionRadius是力的作用範圍.

upwardsModifier是調節爆炸出現的位置,跟explosionPosition的區別在於,修改這個值他的中心跟影響半徑不會被修改.默認為0的情況下,中爆炸中心到剛體的質量中心力的方向是線性的,

假如這個值為2時,就是他爆炸出現的實際位置在中心點想下2個單位.

Mode代表應用到目標力的方式.

OK,效果到這裡就已經實現完了,比較簡單,就幾行代碼.主要就是看你對Unity物理這一塊的掌握程度.

關注公眾號:[代碼律動ColdingWave] 可獲得更多項目資源與視頻教學.

回復"手雷爆炸"即可獲得本節課手雷的模型及特效資源.


推薦閱讀:

互聯網簡訊-20180209
撒貝南為什麼要在馬雲講話時笑場?
Final cut很難嗎?1招教你快速剪出優秀短視頻,超簡單!
沒有風度,至少試著領悟
為何《銀翼殺手2049》值9.7分?

TAG:Unity遊戲引擎 | 互聯網 | 遊戲 |