一、剛體 Rigid Body 2D
? 剛體是物理系統(tǒng)中用于幫助我們進行模擬物理碰撞中力的效果的
? 2D 物理系統(tǒng)中的剛體和 3D 中的剛體基本是一樣的,最大的區(qū)別是對象只會在 XY 平面中移動,并且只在垂直于該平面的軸上旋轉(zhuǎn)
? 不同于 3D 剛體,2D 剛體具有以下三種類型:
(一)Dynamic
? 物體會受到力的影響移動和旋轉(zhuǎn)
-
Material:物理材質(zhì)
在剛體上設置了物理材質(zhì),若子物體有碰撞器但是沒有設置材質(zhì),則會用剛體的物理材質(zhì)
如果不設置,則將使用在 Physics 2D 窗口中設置的默認材質(zhì)
物理材質(zhì)使用的優(yōu)先級:2D 碰撞器?
>
?2D 剛體?>
?Physics 2D 窗口 -
Simulated:子物體模仿,默認開啟即可
如果希望 2D 剛體以及所有子對象 2D 碰撞器和 2D 關節(jié)都能模擬物理效果,則需要啟用該選項
-
Use Auto Mass:是否使用自動質(zhì)量
-
Mass:質(zhì)量
-
Linear Drag:影響位置移動的阻力系數(shù)
-
Angular?Drag:影響旋轉(zhuǎn)移動的阻力系數(shù)
-
Gravity Scale:受重力影響的程度
-
Collision Detection:碰撞檢測算法
- Discrete:離散檢測算法,只會用新位置進行計算,速度太快時會穿過而檢測不到
- Continuous:連續(xù)檢測算法,計算量大,但不會發(fā)生穿過的現(xiàn)象
-
Sleeping Mode:對象處于靜止狀態(tài)時進入睡眠模式
- Never Sleep:從不休眠,會一直進行檢測計算,性能消耗大
- Start Awake:最初處于喚醒狀態(tài),靜止一段時間后會睡眠
- Start Asleep:最初處于睡眠狀態(tài),但是可以被碰撞喚醒
-
Interpolate:物理更新間隔之間的插值運算
- None:不應用移動平滑
- Interpolate:根據(jù)前一幀進行平滑處理
- Extrapolate:根據(jù)后一幀進行平滑處理
-
Constrains:約束限制,可以讓某一個軸不受力影響位移或者旋轉(zhuǎn)
-
Info:顯示的物理信息,僅可查看不可修改
(二)Kinematic
? 不受力的影響,只能通過代碼讓其動起來
? 能和 Dynamic 2D 剛體產(chǎn)生碰撞,但是不會動,只會進入碰撞檢測函數(shù),因此沒有質(zhì)量、摩擦系數(shù)等屬性
? 性能消耗較低,主要是使用代碼處理移動和旋轉(zhuǎn)
-
Material:物理材質(zhì)
在剛體上設置了物理材質(zhì),若子物體有碰撞器但是沒有設置材質(zhì),則會用剛體的物理材質(zhì)
如果不設置,則將使用在 Physics 2D 窗口中設置的默認材質(zhì)
物理材質(zhì)使用的優(yōu)先級:2D 碰撞器?
>
?2D 剛體?>
?Physics 2D 窗口 -
Simulated:子物體模仿,默認開啟即可
如果希望 2D 剛體以及所有子對象 2D 碰撞器和 2D 關節(jié)都能模擬物理效果,則需要啟用該選項
當啟用時,會充當一個無限質(zhì)量的不可移動的對象,可以和所有 2D 剛體產(chǎn)生碰撞
若 Use Full Kinematic Contacts 被禁用,則只會和 Dynamic 2D 剛體碰撞
-
Use Full Kinematic Contacts:充分使用運動學接觸
如果希望能和所有 2D 剛體碰撞,則啟用該選項
若不啟用,則不會和 Kinematic 2D 和 Static 2D 剛體碰撞
-
Collision Detection:碰撞檢測算法
- Discrete:離散檢測算法,只會用新位置進行計算,速度太快時會穿過而檢測不到
- Continuous:連續(xù)檢測算法,計算量大,但不會發(fā)生穿過的現(xiàn)象
-
Sleeping Mode:對象處于靜止狀態(tài)時進入睡眠模式
- Never Sleep:從不休眠,會一直進行檢測計算,性能消耗大
- Start Awake:最初處于喚醒狀態(tài),靜止一段時間后會睡眠
- Start Asleep:最初處于睡眠狀態(tài),但是可以被碰撞喚醒
-
Interpolate:物理更新間隔之間的插值運算
- None:不應用移動平滑
- Interpolate:根據(jù)前一幀進行平滑處理
- Extrapolate:根據(jù)后一幀進行平滑處理
-
Constrains:約束限制,可以讓某一個軸不受力影響位移或者旋轉(zhuǎn)
-
Info:顯示的物理信息,僅可查看不可修改
(三)Static
? 完全不動的需要檢測碰撞的對象,相當于時無限質(zhì)量不可移動的對象,性能消耗最小,只能和 Dynamic 2D 剛體碰撞
? 和它類似的有只加碰撞器而不加剛體的物體,它們會和剛體物體產(chǎn)生碰撞,但是自己不會動
??總結:
-
Dynamic 動態(tài)剛體:受力的作用,要動要碰撞的對象
-
Kinematic 運動學剛體:通過剛體 API 移動的對象,不受力的作用,但是想要進行碰撞檢測
-
Static 靜態(tài)剛體:不動不受力作用的靜態(tài)物體,但是想要進行碰撞檢測
??代碼示例:
// 加力
Rigidbody2D rigid = this.GetComponent<Rigidbody2D>();
rigid.AddForce(new Vector2(0, 100));
// 速度
rigid.velocity = new Vector2(1, 0);
二、碰撞器 Collider 2D
? 碰撞器是用于在物理系統(tǒng)中表示物體體積的的(形狀或范圍),剛體通過得到碰撞器的范圍信息進行計算,判斷兩個物體的范圍是否接觸,如果接觸剛體就會模擬力的效果產(chǎn)生速度和旋轉(zhuǎn)
(一)圓形碰撞器
- Editor Collider:碰撞器編輯器
- Material:一種物理材質(zhì),用于確定碰撞的屬性,控制摩擦和彈性
- Is Trigger:是否為觸發(fā)器
- Used By Effector:是否被附加到 2D 效應器使用
- Offset:圓心偏移位置
- Radius:圓形半徑
(二)盒狀碰撞器
-
Editor Collider:碰撞器編輯器
-
Material:一種物理材質(zhì),用于確定碰撞的屬性,控制摩擦和彈性
-
Is Trigger:是否為觸發(fā)器
-
Used By Effector:是否被附加到 2D 效應器使用
-
Used By Composite:是否被附加到 2D 復合碰撞器中使用
勾選后,將會消失一些屬性,這些屬性將在復合碰撞器中設置
-
Auto Tilling:如果精靈渲染器組件中的 Draw Mode 設置為 Tiled,勾選該選項后,當改變精靈大小時將自動更新碰撞器的尺寸
-
Offset:中心偏移位置
-
Size:矩形寬高
-
Edge Radius:使四個頂點為圓角
(三)多邊形碰撞器
-
Editor Collider:碰撞器編輯器
-
Material:一種物理材質(zhì),用于確定碰撞的屬性,控制摩擦和彈性
-
Is Trigger:是否為觸發(fā)器
-
Used By Effector:是否被附加到 2D 效應器使用
-
Used By Composite:是否被附加到 2D 復合碰撞器中使用
勾選后,將會消失一些屬性,這些屬性將在復合碰撞器中設置
-
Auto Tilling:如果精靈渲染器組件中的 Draw Mode 設置為 Tiled,勾選該選項后,當改變精靈大小時將自動更新碰撞器的尺寸
-
Offset:中心偏移位置
-
Points:多邊形頂點
(四)邊界碰撞器
? 邊界碰撞器一般不會手動通過數(shù)值加點,主要還是通過 Edit Collider
- Editor Collider:碰撞器編輯器
- Material:一種物理材質(zhì),用于確定碰撞的屬性,控制摩擦和彈性
- Is Trigger:是否為觸發(fā)器
- Used By Effector:是否被附加到 2D 效應器使用
- Offset:中心偏移位置
- Edge Radius:使四個頂點為圓角
- Points:頂點
(五)膠囊碰撞器
- Editor Collider:碰撞器編輯器
- Material:一種物理材質(zhì),用于確定碰撞的屬性,控制摩擦和彈性
- Is Trigger:是否為觸發(fā)器
- Used By Effector:是否被附加到 2D 效應器使用
- Offset:中心偏移位置
- Size:膠囊的寬高
- Direction:膠囊方向
- Horizontal:水平方向
- Vertical:豎直方向
(六)復合碰撞器
? 復合碰撞器會將其子物體所有的碰撞器合并在一起,得到一個新的碰撞器
? 復合碰撞器必須配合剛體使用
- Material:一種物理材質(zhì),用于確定碰撞的屬性,控制摩擦和彈性
- Is Trigger:是否為觸發(fā)器
- Used By Effector:是否被附加到 2D 效應器使用
- Offset:中心偏移位置
- Geometry Type:幾何學類型,合并碰撞體時,頂點將組合為兩種不同的幾何體類型
- Outlines:空心輪廓,類似邊界碰撞器
- Polygons:實心多邊形,類似多邊形碰撞器
- Generation Type:生成類型,復合碰撞器在何時生成新的幾何體
- Synchronous:對 2D 復合碰撞器或使用的其他碰撞器修改時,Unity 立即生成新幾何體
- Manual:手動生成新的幾何體,通過代碼生成或者點擊下方的 Regenerate Collider 按鈕
- Vertex Distance:從復合碰撞器手機頂點時允許的最小間距值
- Offset Distance:合并頂點時的偏移位置,可以理解為生成幾何體的圓潤程度
- Edge Radius:使頂點為圓角
?
??碰撞檢測函數(shù):
private void OnCollisionEnter2D(Collision2D collision) { }
private void OnCollisionExit2D(Collision2D collision) { }
private void OnCollisionStay2D(Collision2D collision) { }
private void OnTriggerEnter2D(Collider2D collision) { }
private void OnTriggerExit2D(Collider2D collision) { }
private void OnTriggerStay2D(Collider2D collision) { }
三、物理材質(zhì) Material 2D
? 物理材質(zhì)是用于決定在物體產(chǎn)生碰撞時這些物體之間的摩擦和彈性表現(xiàn)的
? 通過物理材質(zhì)我們可以做出類似斜坡不滑落,小球反彈等效果
- Friction:摩擦系數(shù),0 表示沒有摩擦力
- Bounciness:反彈程度,0 表示沒有彈力,1 表示沒有能量損失一直反彈
四、恒定力 Constant Force 2D
? 恒定力是一個特殊的腳本,它可以給一個 2D 剛體持續(xù)添加一個力
? 在做一些隨著時間推移而加速的對象時很適用,比如類似火箭發(fā)射等效果
? 恒定力腳本會線性的為對象添加力和扭矩力,讓其移動和旋轉(zhuǎn)
- Force:物理更新時施加于 2D 剛體上的線性力
- Relative Force:物理更新時施加的線性力(相對剛體對象的坐標系)
- Torque:物理更新時施加于 2D 剛體的扭矩力
五、2D 效應器 Effector 2D
? 2D 效應器是配合 2D 碰撞器一起使用的,可以讓游戲?qū)ο笤谙嗷ソ佑|時產(chǎn)生一些特殊的物理作用力
? 可以通過 2D 效應器快捷地實現(xiàn)一些傳送帶、互斥、吸引、漂浮、單向碰撞等等效果
? 使用效應器需要同時添加 Effector 2D 和 Collider 2D 組件,并且把 Used By Effector 和 Is Trigger 都勾選上
(一)區(qū)域效應器 Area
? 主要作用:在一個區(qū)域內(nèi)讓游戲?qū)ο笫艿搅团ぞ亓Φ淖饔?/p>
-
Use Collier Mask:是否啟用碰撞器遮罩,如果開啟才會出現(xiàn) Collider Mask
可以通過選擇層,決定改效應器只會作用于哪些層的對象,區(qū)分對待不同物體
-
Collider Mask:碰撞器遮罩層
-
Use Global Angle:勾選將使用世界坐標系的角度,如果不勾選,角度為局部角度
-
Force Angle:施加力的角度
-
Force Magnitude:施加力的大小
-
Force Variation:施加力的隨機大小變化,會在 Force Magnitude 基礎上根據(jù)該值進行隨機變化
-
Force Target:效應器在目標對象上施加力的作用點
- Collider:以碰撞器當前的位置施加力,如果碰撞器有偏移,沒有位于質(zhì)心,則會產(chǎn)生扭矩力,帶來旋轉(zhuǎn)
- Rigidbody:以剛體當前的質(zhì)心施加力,不會產(chǎn)生扭矩力
-
Drag:阻力
-
Angular Drag:扭矩阻力
(二)浮力效應器 Buoyancy
? 主要作用:模擬流體行為,浮動和阻力相關設置,讓玩家在該區(qū)域看起來像在水里移動
-
Use Collier Mask:是否啟用碰撞器遮罩,如果開啟才會出現(xiàn) Collider Mask
可以通過選擇層,決定改效應器只會作用于哪些層的對象,區(qū)分對待不同物體
-
Collider Mask:碰撞器遮罩層
-
Density:流體密度
碰撞體密度大,則碰撞體會下沉;密度小,則碰撞體會上浮
密度和流體相同的碰撞體會浮在流體中
-
Surface Level:定義浮力流體的表面位置
對象高于此線時,不會對其施加浮力;低于或相交此線時,會施加浮力,沿世界坐標的 Y 軸偏移
-
Linear Drag:阻力
-
Angular Drag:扭矩阻力
-
Flow Angle:流體流動方向相對世界空間的角度,將會沿指定方向施加浮力
-
Flow Magnitude:與 Flow Angle 結合使用,該值決定浮力的大小
-
Flow Variation:隨即改變流體的力的大小值
(三)點效應器 Point
? 主要作用:模擬類似磁鐵吸引或排斥的效果
-
Use Collier Mask:是否啟用碰撞器遮罩,如果開啟才會出現(xiàn) Collider Mask
可以通過選擇層,決定改效應器只會作用于哪些層的對象,區(qū)分對待不同物體
-
Collider Mask:碰撞器遮罩層
-
Force Magnitude:施加力的大小
-
Force Variation:施加力的隨機大小變化,會在 Force Magnitude 基礎上根據(jù)該值進行隨機變化
-
Distance Scale:效應器和目標之間距離的縮放,計算距離時,會按照該比值對距離進行縮放
- Collider:碰撞器當前的位置
- Rigidbody:剛體當前的質(zhì)心位置
-
Force Target:效應器在目標對象上施加力的作用點
- Collider:以碰撞器當前的位置施加力,如果碰撞器有偏移,沒有位于質(zhì)心,則會產(chǎn)生扭矩力,帶來旋轉(zhuǎn)
- Rigidbody:以剛體當前的質(zhì)心施加力,不會產(chǎn)生扭矩力
-
Force Mode:計算力的模式
- Constant:忽略和源與目標之間的距離
- Inverse Linear:反線性距離計算,距離越遠,力的大小呈線性減小
- Inverse Squared:反平方距離計算,力的大小呈指數(shù)減小,類似現(xiàn)實世界的重力
-
Drag:阻力
-
Angular Drag:扭矩阻力
(四)平臺效應器
? 主要作用:2D 游戲當中的平臺或可往上跳躍的墻壁
? 這里的 Collider 不需要勾選 Is Triiger,因為是平臺
-
Use Collier Mask:是否啟用碰撞器遮罩,如果開啟才會出現(xiàn) Collider Mask
可以通過選擇層,決定改效應器只會作用于哪些層的對象,區(qū)分對待不同物體
-
Collider Mask:碰撞器遮罩層
-
Rotational Offset:旋轉(zhuǎn)偏移量,控制平臺角度偏移
-
Use One Way:是否使用單向碰撞行為
-
Use One Way Grouping:當平臺是有多個碰撞器組合時,可以通過它將所有碰撞器設置為單向碰撞行為
-
Surface Arc:以局部坐標系從下向上的方向為中心,填寫一個角度值,定義不允許通過的表面,該角度外的其他地方視為單向碰撞
-
Use Side Friction:是否在平臺兩側(cè)使用摩擦
-
Use Side Bounce:是否在平臺兩側(cè)使用彈性
-
Side Arc:用于定義左右兩側(cè)平臺的相應弧度
(五)表面效應器
? 主要作用:模擬傳送帶
? 這里的 Collider 不需要勾選 Is Triiger,因為是表面
-
Use Collier Mask:是否啟用碰撞器遮罩,如果開啟才會出現(xiàn) Collider Mask
可以通過選擇層,決定改效應器只會作用于哪些層的對象,區(qū)分對待不同物體
-
Collider Mask:碰撞器遮罩層
-
Speed:表面保持的速度
-
Speed Variation:速度的隨機增加值
-
Force Scale:縮放沿表面移動時施加的力
0 表示不施加力,相當于禁用,值越低越慢,值越高越快
不建議設置為 1,因為這可能會抵消施加在物體的其他里,比如跳躍起來的力
-
Use Contact Force:是否對接觸物體表面的接觸點施加力
如果選擇則會讓物體旋轉(zhuǎn),如果不選擇則不會旋轉(zhuǎn)
-
Use Friction:是否使用摩擦文章來源:http://www.zghlxwxcb.cn/news/detail-494441.html
-
Use Bounce:是否使用彈力文章來源地址http://www.zghlxwxcb.cn/news/detail-494441.html
到了這里,關于Unity核心3——2D物理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!