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 Speed:Motor本身的速度,在不受力情況下一直作用的速度;
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官方文件的研究就到這裡。