(Doc) Fracturing & Destruction Scripting

本篇文章、圖片出處來自 Fracturing & Destruction Scripting
軟體版本與本翻譯文件可能會有落差,本翻譯文件僅供參考。
本譯文為本站譯者原創翻譯內容,文字著作權歸本站所有。
未經授權,請勿任意轉載、改作或商業使用。

Fracturing & Destruction Scripting(碎裂與破壞:腳本控制)

這裡說明你可以透過腳本使用的公開方法(exposed methods)。

除了碰撞通知(collision notifications)之外,你主要會接觸到 2 個類別:

  • FracturedObject:掛有 FracturedObject 元件的 GameObject。
  • FracturedChunk:當計算碎裂(fracturing is computed)後,由 FracturedObject 產生的每個碎塊(chunk)。 每個碎塊的 GameObject 都會掛有一個 FracturedChunk。

FracturedObject methods(FracturedObject 方法)

void Explode(Vector3 v3ExplosionPosition, float fExplosionForce)

將整個物件爆炸成碎塊(chunks)。

  • v3ExplosionPosition:爆炸的來源點。
  • fExplosionForce:爆炸強度。

void Explode(Vector3 v3ExplosionPosition, float fExplosionForce, float fRadius, bool bPlayExplosionSound, bool bInstanceExplosionPrefabs, bool bAlsoExplodeFree, bool bCheckStructureIntegrityAfter)

因為提供了影響半徑(influence radius),所以只會部分爆炸物件(partial explode)。

  • v3ExplosionPosition:爆炸來源位置。
  • fExplosionForce:爆炸強度。
  • fRadius:爆炸半徑。只有在此半徑內的碎塊會受到爆炸影響。
  • bPlayExplosionSound:是否播放爆炸音效(sound clip)? 此音效在元件面板(component panel)的 Events 區段中設定。
  • bInstanceExplosionPrefabs:是否實例化(instance)爆炸 prefabs? 這些 prefabs 多半是爆炸粒子效果,並同樣在元件面板的 Events 區段設定。
  • bAlsoExplodeFree:是否也讓自由碎塊(free chunks;也就是已經從物件脫離的碎塊)同樣受到爆炸影響?
  • bCheckStructureIntegrityAfter:若此物件具有連結資訊(透過檢視器中的 "Connection Information" 參數), 且爆炸後需要檢查是否有可能塌陷的碎塊,則將此值設為 true。

void CollapseChunks()

將整個物件塌陷,並把所有碎塊設為自由(free)。

void ResetChunks()

將所有碎塊重設回最初、未破壞的位置。 唯一條件是:在呼叫之前沒有任何碎塊被刪除。

FracturedChunk methods(FracturedChunk 方法)

static FracturedChunk ChunkRaycast(Vector3 v3Pos, Vector3 v3Forward, out RaycastHit hitInfo)

回傳從位置 v3Pos 朝向 v3Forward 方向做 raycast 時所相交的碎塊; 如果沒有任何碎塊相交則回傳 null。
hitInfo 會包含 raycast 的資訊(請參考 Unity 的 RayCastHit 參考文件)。

void Impact(Vector3 v3Position, float fExplosionForce, float fRadius, bool bAlsoImpactFreeChunks)

用來通知一個撞擊(impact)(子彈、飛彈,或任何一般物件)擊中「仍附著於結構」的某個碎塊。 通常做法是:從武器進行 raycast 來確認視線上是否有碎塊;武器開火且命中時呼叫此方法。 這會以以下參數產生爆炸:

  • v3Position:撞擊位置(由 raycast 提供)。
  • fExplosionForce:爆炸強度。
  • fRadius:爆炸半徑。半徑內所有碎塊也會一起脫離並爆炸。
  • bAlsoImpactFreeChunks:若自由碎塊在半徑內,也會一併爆炸。

void DetachFromObject(bool bCheckStructureIntegrity = true)

讓碎塊從結構上脫離。 若 bCheckStructureIntegrity 為 true,會執行結構完整性檢查(structure integrity check), 以確認是否還有更多碎塊需要塌陷 (只有在檢視器中設定了 "Connection Information" 參數時才使用此功能)。

Collision notifications(碰撞通知)

如果你在檢視器面板中,對應的 Events 區段設定了 "Call Method Name" 與 "Call GameObject" 參數, 那麼當碎塊脫離或發生碰撞時,你會收到通知。 這可用於自訂處理:當 prefab 實例化或音效片段不足以滿足需求時,你可以自行擴充邏輯。

被呼叫的方法會接收到一個 FracturedChunk.CollisionInfo 物件,例如:

void OnChunkNotification(FracturedChunk.CollisionInfo info)
{
https:// Do something fancy here
}
  

重要! 與另外兩個事件不同,區段 "On Every Chunk Detach Event" 的事件不會接收任何參數。 這個事件會在每次碎塊從物件脫離時觸發,無論原因為何。 而 "Chunk Detach From Öbject Due To Physics Collision" 事件只會在剛體(rigidbody)與物件碰撞時觸發; 若是腳本呼叫(FracturedObject.Explode(), FracturedObject.CollapseChunks(), FracturedChunk.Impact(), FracturedChunk.DetachFromObject()...)所造成的脫離,則不會觸發此事件。

FracturedChunk.CollisionInfo parameters(FracturedChunk.CollisionInfo 參數)

  • chunk(type FracturedChunk): 接收到碰撞、且即將脫離或碰撞的碎塊(依照你要求的通知類型而定)。
  • collisionInfo(type Collision): Unity 3D 提供的碰撞資訊。 例如你可以用它取得接觸點(contact points)或法線(normals)。
  • bIsMain(bool): 只在你要求「脫離通知」時使用。 對於非主碎塊,這個值用來表示該碎塊是否為主碎塊(被命中的那個), 或是因為鄰近關係而一起脫離的碎塊(由於 FracturedObject.ChunkConnectionStrength < 1)。
  • bCancelCollisionEvent(bool): 若設為 true,會取消碰撞事件,使其不執行任何動作。

此網誌的熱門文章

哥利亞遙控炸彈 (Leichter Ladungsträger Goliath)

O-I(試製120t超重戰車「オイ」)