1. 程式人生 > >【Fracturing & Destruction】Unity3D的物體爆裂、炸裂、碎裂效果

【Fracturing & Destruction】Unity3D的物體爆裂、炸裂、碎裂效果

如果要想做到如下圖的爆裂、炸裂、碎裂效果特效:


自己手寫可不容易,因為需要利用《【Unity3D】Mesh》(點選開啟連結)將一個物體分解成多個碎片,然後再寫一系列的方法。此時可以利用到Unity3D的一個外掛Fracturing & Destruction,官網上60美金,但用和諧的我,也給大家上傳了一份:http://download.csdn.net/detail/yongh701/9845202

上述例子具體實現方法如下。

一、場景佈置

1、基本的幾何體設定如下圖所示,沒啥好說的。


2、之後匯入Fracturing & Destruction 1.11.unitypackage元件。


3、之後可以如圖【Create Other】->【Ultimate Game Tools】->【Fractured Object】新增一個Fractured Object。


4、對於Fractured Object設定如下圖所示,Source Object就是要被碎裂的物體,Start Static勾上是指一開始不碎裂。Chunk Physic Material選擇Rock也只有這種可以給你選。Fracture Method有兩種,一種是BSP,是嚴格地按照方框裝切割物體,表現的碎裂的方式是物體內部的張力較大,就是你手撕魷魚片的感覺,對於普通物體不太真實,但耗資源少。這裡選擇Voronoi這種方式,同時在Cells in Local XYZ增大倍數,意思在XYZ方向上產生更多的碎片。Interior Material應與這個牆的材質保持一致。


設定完畢,點選Compute Chunks計算碎片。這裡的Cells In Local X Y Z設定9x9x9=729塊碎片,如果機器配置不行或者Unity3D版本低可能會報錯或者宕機,修改為4x4x4=64塊碎片,重新點選Compute Chunks計算碎片。詢問是否將原來的模型隱藏,選擇是,然後就會形成一個又無數子模型組成的原模型來替代。如圖所示。


5、之後給球【Componet】->【Physics】->【Rigidbody】加上一個剛體屬性。並且同時調大球的質量為10,讓它足夠重去撞碎這堆牆。之後就可以開始指令碼的編寫。


二、指令碼佈置

給球加上如下的一個簡單指令碼Push.cs,就能看到效果。

  1. using UnityEngine;  
  2. using System.Collections;  
  3. publicclass Push : MonoBehaviour  
  4. {  
  5.     void Start()  
  6.     {  
  7.         rigidbody.velocity = new Vector3(0, 0, 50);  
  8.     }  
  9. }  
很簡單,就一行的力,這裡只是讓球有一個向牆的、極高的初始速度,足以像子彈一樣將牆撞碎。不要用《【Unity3D】用滑鼠點選事件、AddForce完成跳躍與二段跳》(
點選開啟連結)加力的方式,因為根據牛頓第一定律,物體是有慣性的,給物體就算加再大的力,也很難在初始得到如此高的動能,你只是能得到一個很高的加速度罷了,得不到這種效果。

而且這裡的速度不能設定得過高,因為如果速度過高,Unity3d會有Bug,認為這個球在瞬間會有極高的位移,出現球穿牆的bug。Unity3d的物理引擎認為就是像你迅速挪動桌布一樣,不會對桌面上的物體有任何影響,球也是無法擊碎牆的。