利用Unity自帶物理引擎實現小球碰撞無損反彈

利用Unity自帶物理引擎實現小球碰撞無損反彈

來自專欄 策劃的遊戲之路

之前玩過一款物理彈球的遊戲,覺得很有意思,也萌發了做一款類似的遊戲,這裡講講如何做到碰撞後無損反彈。

作為一個業餘遊戲開發者,而且知道Unity自帶的物理引擎功能很完善,所以一開始就沒打算自己寫相關代碼。首先我自己這個項目是2D,所以裡面用到都是2D組件或者材質。

一、小球

先創建一個3d小球,刪掉3d碰撞盒,加上2d碰撞盒。

我們在小球上加一個物理組件,3D項目可以用Rigidbody這個組件,參數略有差別。

(Rigidbody2D參數:blog.csdn.net/SerenaHav)。

因為在運行的時候發現小球碰撞的時候Rotation有Z軸旋轉,所以在Constraints里勾上了Freeze Rotation Z,不讓其旋轉。

二、牆壁

牆壁就比較簡單,創建四個cube,圍成個圍牆,同理刪掉3d碰撞盒,加入2d碰撞盒(牆是方形,球是圓形,組件不一樣),其他都不需要設置,我們只需要這個碰撞盒,都不需要加組件Rigidbody,因為牆是不動,這樣也比較省資源。

三、無損反彈

這時候小球碰到牆壁會直接粘在牆上,這時需要在物理組件Rigidbody上的Material上加上物理材質。點擊菜單欄的Assets--Create--Physical Material 2D。

給這個物理材質命名後,點擊這個材質我們看到有兩個屬性。

第一個是摩擦力係數,第二個是反彈係數,想要無損碰撞反彈,反彈係數則填1。

將這個物理材質拖到RigidBody的Material里

這樣,一個無損的封閉的碰撞系統就完成。

小球的發射比較簡單,這裡就不細說了。

四、速度過慢導致碰撞後速度消失

在運行中,發現如果小球的水平分速度太小,碰撞後就變成0,這個問題困擾我很久,找不到原因,甚至讓我想自己寫這個碰撞機制。查閱資料後才發現,這個物理材質還有一些參數設置。具體看下圖

紅框就是罪魁禍首,默認值是1,表示低於這個數值的速度將認為不是碰撞,速度也就消失

(參考:blog.csdn.net/zqzhang19

關於小球碰撞反彈就先寫到這裡,後面繼續研究,歡迎討論!!!


推薦閱讀:

Dirty Game Engine
自製遊戲引擎 - 0 - Hello world
[Siggraph15] GPU-Driven Rendering Pipelines
從零開始手敲次世代遊戲引擎(四十二)
從紋理中生成法線貼圖

TAG:遊戲引擎 | 遊戲開發 | Unity遊戲引擎 |