1. 程式人生 > >Unity3D 官方文件 2D遊戲的起始3 2D物理續 Collider、關節、效應器

Unity3D 官方文件 2D遊戲的起始3 2D物理續 Collider、關節、效應器

版本:unity 2017.1  語言:C#

總起:

之前介紹了剛體元件,這邊要把剩下物理元件介紹完。Collider大家平時都在用,關節可能少點,實現特定功能會用到,至於效應器,大家跟我一起來看看這個東西有什麼作用吧。

Collider 2D:

用於定義2D物體的形狀,使剛體與剛體之間可以發生碰撞,這邊Collider需要根據需求來設定,一般簡單的Box、Circle已經足夠用於遊戲的物理碰撞。

剛體使用Auto Mass的情況會自動根據Collider形狀的大小來生成質量,這一點和浮力效應器能夠很好的配合。

Box Collider 2

個人感覺這個Box最常用,就以這個來作為講解的範例。反正就是一個矩形的碰撞盒嘛。


Edit Collider按鈕:這個按鈕要介紹的,很好用,能直接在Scene視窗下調整碰撞盒的大小。

Density:密度,影響剛體設定自動生成質量,當然這個只在剛體設定了Use Auto Mass;

Material:2D的物理材質,不多說了,詳細的請看上一章;

Is Trigger:該Collider是否用於Trigger;

Used By Effector:該Collider是否用於效應器;

Used by Composite:該Collider是否是Composite Collider 2D的一部分,勾選該框之後,該Collider的其他屬性會被忽略,因為Unity會以Composite Collider 2D的屬性做為該Collider的屬性;

Auto Tiling:當Sprite Renderer的Draw Mode設定為Tiled的時候,可以勾選該選項,以自動適應Sprite的平鋪;

Offset:調整Collider的偏移;

Size:調整Collider的寬和高;

Edge:在Collider的周圍生成一圈圓形的邊緣,用於增加Collider的範圍,預設為0。

Circle Collider 2D、Capsule Collider 2D

圓和膠囊的Collider,形狀不一樣,其他的與上面一樣。

Polygon Collider 2D、Edge Collider 2D

Polygon和Edge最大的區別,Polygon必須是封閉的,而Edge不用,他們都可以按照點位自定義形狀,其他的與上面一樣。

Polygon在2017版中可以在Sprite Editor中編輯然後預設生成了,但是還是沒有提供直接生成和Mesh對應的碰撞盒。

Composite Collider 2D

複合碰撞體,它可以結合其他的碰撞體生成一個大的碰撞體。與上面的屬性相比多了下面幾個:

Geometry Type:幾何形狀型別

    1.Outlines,線性形式,類似Edge Collider 2D;

    2.Polygons,多邊形形式,類似Polygon Collider 2D。

Generation Type:產生的型別

    1.Synchronous,只要其他的Collider一發生變化,該幾何形狀就會立刻發生變化;

    2.Manual,使用CompositeCollider2D.GenerateGeometry()方法才能生成,或者點選Regenerate Geometry按鈕。

Vertex Distance:頂點與頂點之間的最小間距,小於該間距的點只會保留一個。

2D Joints:

關節用於定義剛體與剛體之間連線的效果,數量很多,我在介紹一些關鍵的屬性後,會說明各個關節的作用,有需要的自己實踐一下。

Distance Joint 2D 距離關節

距離關節保持兩個Rigidbody一直在同一個距離,需要注意的是該關節不能作用旋轉力,如果需要旋轉力的話請使用一個沒有彈力的spring關節:


Enable Collision:關節啟用碰撞;

Connected Rigidbody:需要連線的Rigidbody,如果設定為None,則連線點為Connected Anchor;

Auto Configure Connected Anchor:勾選該選項後,連線的錨點會自動配置(感覺不好用);

Anchor:當前GameObject的錨點;

Connected Anchor:被連線的GameObject的錨點;

Auto Configure Distance:自動配置當前關節的距離,執行中,取消勾選該選項後,關節就會固定兩個剛體;

Distance:關節的距離;

Max Distance Only:勾選該選項後,關節連線的兩個剛體之間的距離可以小於Distance。大於Distance距離時才會產生拖動效果;

Break Force:作用多少力之後關節會被破壞而刪除。

應用舉例:沒選Max Distance Only,汽車輪子之間的固定距離;勾選Max Distance Only,類似悠悠球。

Fixed Joint 2D 固定關節

該關節會將兩個剛體固定到同一距離和方向,而Distance Joint 2D的話方向不會固定。接下來介紹的屬性只會說一些上面沒有說的屬性:

Damping Ratio:值只能在0到1,決定是抑制震動的力,值越到抑制力越大;

Frequency:決定震動的強度,值越大震動的越快,設定個30看著效果就不錯。

Relative Joint 2D 相對關節

類似於固定關節,所以提到前面來先講,固定關節是固定在另一個點上進行震動,而相對關節是關節角度不會變化,另一個連線點追著固定點進行震動。

Max Force:設定對線性震動進行抵消的力;

Max Torque:設定對扭轉震動進行抵消的力。

固定關節是彈簧的實現、與錨點相關、但不能修改實時速度和角度;相對關節是最大力和扭力的實現、與錨點無關、可以修改實時速度和角度。

應用:太空遊戲中額外的電池需要滯後的跟隨飛船;相機跟隨玩家需要用可配置的力來追蹤。

Friction Joint 2D 摩擦關節

該關節是讓兩個點儘量保持一個相對的距離和方向:如果另一個點是固定點,那該剛體會慢慢減慢速度直到靜止;如果另一個點會運動,則兩個最終會保持一個相對位置持續向一個方向運動,但保證了他們倆之間是相對靜止的。

屬性上沒什麼特別的都是之前做過的。應用上可以做一個平臺,玩家跳到上面後,平臺有向下移動的趨勢。

Hinge Joint 2D 鉸鏈關節

鉸鏈關節感覺是個非常常用的關節,它可以用於一個剛體繞著某個點旋轉的效果,其中Connected Anchor指明繞著世界座標中的哪個點旋轉,Anchor指明當前剛體的旋轉點。它可以被動的受力旋轉,也可以設定Motor Speed本身就旋轉,更加可以利用Limits屬性設定旋轉的最大最小角度。

Auto Configure Connected這個選框沒什麼用,一般直接調整Anchor就好,Connected Anchor保持(0, 0),下圖是實現一個鏈子的一個鉸鏈關節。


Use Motor:是否使用鉸鏈的Motor功能;

Motor SpeedMotor本身的速度,在不受力情況下一直作用的速度;

Maximum Motor Force:最大能達到的速度;

Use Limits:使用限制模式;

Lower Angle:限制模式下的最小角度;

Upper Angle:限制模式下的最大角度。

應用:

1.比如一扇撞開後自動關閉的門,使用限制模式調整門的最大最小旋轉角度、在使用Motor Speed產生一個自旋轉的速度;

2.剪刀、蹺蹺板、輪子將錨點點固定到其他物體上的情況;

3.鏈子也可以使用多個鉸鏈關節來實現。

    ♦ Slider Joint 2D 滑塊關節

鉸鏈關節的移動版,鉸鏈是固定在一個點旋轉,而滑塊是固定在一個方向內滑動,屬性跟鉸鏈也差不多,就不再多說了。

可以實現類似滑動門這樣的效果,物體響應碰撞或者力沿著一個固定的方向自由自動,當然也可以啟用限制模式和Motor模式。

Spring Joint 2D 彈簧關節

類似於距離關節,但它表現的效果類似於彈簧。如果需要一個僵硬不動的彈簧,設定Frequency、Damping Ratio一個高數值。

技術上來講Frequency為0、Damping Ratio為1時跟距離關節是一樣的。

Target Joint 2D 目標關節

相對關節的簡化版,剛體會以彈簧的行為移動到Target點。用作滑鼠點選物體拖動到一個其他點的效果。

Wheel Joint 2D 車輪關節

正如名稱所示,用於模擬車輪。測試下來,Connected Rigidbody必須要設定為被運送的車體,不然即使設定了Motor,車輪也不會轉,車體最好設定凍結z軸旋轉,這樣就不會翻車了,即使是獨輪車都能運作。

車輪關節是滑塊關節和鉸鏈關節的組合,能非常方便的實現車輪效果。它與3D中的車輪碰撞器不同,車輪碰撞器模擬的是懸掛,只提供牽引力,輪子旋轉只是動畫效果。

Constant Force 2D

這個不是關節,在我們給Rigidbody附加里的時候會使用AddForce函式,該元件用於附加一個恆力,給Rigidbody一直提供動力:


仔細一看3D物理中也有類似的實現,通過這個感覺可以實現幾種重力共存的效果,不過這個元件自己寫一個也不難。

好了這一節的內容就介紹到這裡了,下面是效應器。

Effector 2D:

效應器是什麼東西?上面不是說用Constant Force 2D實現一個多重利共存的效果嘛,更好的實現方式就是使用效應器,它能給一定區域內的物體同時作用一個力。

Area Effector 2D 區域效應器

區域效應器對制定的一個2D區域施加一個力,注意區域使用Collider 2D來制定,Collider 2D上需要勾選Used By Effector。

還有一個預設的細節需要注意,Collider 2D上除了要勾選Used By Effector,還要勾選Is Trigger,否則會和其他物體發生碰撞。


Use Collider Mask:是否使用Collider Mask屬性,預設狀態下效應器對所有剛體都會施加里;

Collider Mask:選擇Layer,用於指定會被效應器影響的物體;

Use Global Angle:勾選時,Angle屬性會以全域性形式進行處理;

Force Angle:力的角度;

Force Magnitude:力的大小;

Force Variation:力變化的大小,用於給力增加一個隨機量;

Drag:線性力的阻力;

Angular:角速度的阻力;

Force Target:

    1.Collider,當Collider2D的中心沒有放在質心時會產生扭力;

    2.Rigidbody,不會產生扭力。

Buoyancy Effector 2D 浮力效應器

浮力效應器定義了簡單的流體行為,設定流體的阻力、浮動和流動。甚至可以控制流動發生在流體下面。

Surface Level:當剛體完全小於該表面時,區域才會施加浮力;

Density:密度,用於計算產生力的效果。

Point Effector 2D 點效應器

以當前區域Transform的座標為中心,產生吸引力或排斥力,可以做到類似小行星圍繞地球旋轉的效果。

Platform Effector 2D 平臺效應器

首先使用該效應器需要去除Is Trigger選項,平臺效應器可以實現單向碰撞、去除邊側碰撞的效果。

Use One Way:是否允許一方通行;

Use One Way Grouping:當多個平臺效應器啟用一方通行時,啟用該值;

Use Side Friction:邊側是否使用摩擦力;

Use Side Bounde:邊側是否使用彈力;

Side Arc:邊側的角度,只有法線與其垂直的才算是邊側。

Surface Effector 2D 表面效應器

首先使用該效應器需要去除Is Trigger選項,表面效應器可以實現傳送帶的效果。

Force Scale:允許調整施加里的比例,最好不要設為1,不然會抵消掉跳躍移動等力。

2D官方文件的研究就到這裡。