Unity學習系列筆記2 物理引擎和碰撞

2021-06-08 15:05:30 字數 2245 閱讀 8955

本小節主要是unity物理引擎,剛體碰撞方面的散記。

character controller的一些特性:

本身不受physics影響,需要接受外力作用時,使用oncharactercolliderhit().

skin width:最好設定為radius的10%,防止角色經常卡住。

step offset:對於2meter高的character最好設為0.1到0.4

min move distance設為0即可。

rigidbody的屬性設定:

is kinematic:開啟後物體不受物理引擎影響,只受transform的控制。比如製作乙個上公升的平台,本身是rigidbody,且不受物理引擎影響,開啟is kinematic.

interpolate:使運動更光滑。

freeze rotation:使旋轉不受碰撞或由script裡定義施加的外力影響。只受tranform控制。

對rigidbody使用力的script方法:addforce(),addtorque().當使用physics時不要直接修改transform.

collision detection:高速運動的碰撞體應設為continuous,防止出現上一幀在其他碰撞物體的這邊,下一幀已經穿過碰撞物體到達另一邊的情形。預設為discrete.只有box,sphere和capsule的collider才能設定為continuous.

對於rigidbody,size是個比mass更重要的屬性,所以在建模的時候強烈建議總是參考實際標準大小(unity中單位長度是公尺)。實時instantiate乙個物體並修改它的大小,會影響其物理屬性,因而會降低遊戲效能。

兩個rigidbody自由下落的速度不受mass影響,而是用drag(空氣阻力)這個引數來控制。drag值越大,看起來感覺物體重量越輕(典型的0.001-金屬塊,10-羽毛)。

對rigidbody使用constant force元件來設定乙個constant force,這個力可以是force或torque。

對物體施加constant force時,設定乙個drag值可讓物體加速到乙個特定的最大速度以後不再加速。drag值越大這個速度越小。

某帶有rigidbody的collider碰撞時會傳送三個訊息給該collider的物件,分別是collider.oncollisionenter,collider.oncollisionexit和collider.oncollisionstay,這些事件可以在script裡選擇利用nvidia physx engine進行特別處理。

總結下來:三種collider:

1.static collider: 帶有collider卻沒有rigidbody的物件,最好用於靜止物體如環境地理。

2.rigidbody collider:帶有rigidbody的collider物件,能夠根據物理引擎很好的響應外力和碰撞作用。

3.kinematic rigidbody collider:帶有rigidbody的collider物件,開啟is kinematic之後,等效於可以頻繁使用insform來移動(而非rigidbody collider利用外力或碰撞的物理效應)的static collider,用於需要rigidbody但不希望響應物理效果的物件。另外就是可以給其設定is trigger,作為某些事件的觸發器,但is trigger的設定物件必須是rigidbody,但你又不希望其受物理定律約束的情形。

注:kinematic還常用來創造ragdoll.由於kinematic可以方便的開關,通常情況下開啟kinematic方便角色移動等,但遇到碰撞、**衝擊等情況,可以在指令碼裡新增**使其關閉kinematic變為普通的rigidbody接受物理作用。

collision action matirx(各種碰撞屬性物件碰撞的訊息傳送標準):

各種碰撞屬性物件的碰撞訊息傳送標準

不難看出其中規律。

另外unity3.x以後支援layer-based collision detection,這個在後面script的學習裡會詳細介紹。

兩個mesh collider不能互相碰撞除非都設為convex。mesh collider設定為convex有個限制,這個mesh必須少於255個三角形。

physics material:設定物體的彈性,摩擦係數,軟硬程度的元件。

hinge joint:關節元件。用於門的軸或者鏈條等。

spring jonit:彈簧元件。實時建立和調整spring的方法——建立乙個空的game object作為spring繫結的connected body物件,在指令碼裡控制這個空的game object從而有效控制spring.

unity學習筆記2

自 對於新手學習unity碰撞講的還是比較清楚的 ontriggerenter和oncollisionenter的觸發條件是不同的,需要在設計的過程中加以關注。碰撞的兩個物體a,b,都要有碰撞體 collider box collider,sphere collider,capsule collid...

Unity 2D物理關節

說明 較比於源專案,我自行做了如下設定 使用方法 實現用途 使用方法 實現用途 使用方法 use limits 是否使用角度限制.若使用則鉸鏈關節旋轉到限制角度後就停止.引數包含lower angle及upper angle 實現用途 使用方法 use limits 是否使用距離限制,限制滑塊兩端的...

Unity 2D Blending 學習筆記

2d blending 不同的型別有不同的用途,它們在計算每個運動的影響方面也有所不同。2d directional 一些動作代表不同的方向時最好使用,例如 向前走 向後走 向左走 和 向右走 或 朝上 朝下 裝備在左 和 裝備在右 還可以選擇在位置 0,0 處的單個動作,例如 空閒 或 直射 在簡...