Unity基礎知識 - Know These Before 2D Creation(二) - 物理引擎簡述

主要內容

2D物理引擎概述

2D剛體組件

2D碰撞體組件

2D鉸鏈關節組件

2D距離關節組件

2D彈簧關節組件

2D區域效果器

2D點效果器


 

2D Physics Overview

2D物理引擎概述

1)Unity有兩套物理引擎,一套是3D,一套是2D。這兩套系統由完全不同的組件來執行,它們有可比性(Comparable),但是並不兼容(Compatible)(有的說可兼容,可能理解不同吧)。3D物理和2D物理能存在於同一場景中,但彼此之間不會交互。2D物理引擎中所有物體的交互都發生在z軸座標爲0的平面上。

 

2)2D物理引擎有一些項目級別的設置,通過Edit/Project Settings/Physics 2D打開。設置中的參數包括重力的方向和大小、默認材質、層間碰撞矩陣等等。*(應該是要另外找了)

 

3)2D物理引擎中一個重要的組件叫作rigidbody 2D,對遊戲對象添加這個組件可以使它處在2D物理引擎的控制當中。rigidbody 2D組件與碰撞體組件一起進行碰撞檢測能接受力和力矩,處理各種類型的關節及其他特殊類型的2D物理行爲。

rigidbody 2D組件顯示了其所在遊戲對象的物理屬性,其中包括質量、線性阻力、角阻力、重力比例及其他屬性。

如果給對象添加碰撞體(collider)組件,它就可以參與物理碰撞和觸發器事件。

 

4)一個對象添加rigidbody 2D組件,可以使用一些joint 2D(2D關節類型)組件,進而參與更復雜的物理行爲,比如(鉸鏈)鏈接、彈簧、滑動、連接(配對)。2D關節組件允許遊戲對象以場景內某個點或某個遊戲對象爲錨點,並對此錨點做出物理反應。

 

5)碰撞體組件的材質有兩個參數可以控制摩擦係數(friction)和彈性係數(bounce)。


 

Rigidbody 2D

2D剛體組件

1)2D剛體組件允許遊戲對象在2D物理引擎的影響下發生運動,遊戲必須同時擁有一個2D碰撞體組件時才能與場景中的其他對象發生交互

 

2)質量、線性阻力、角阻力、重力比例這個幾個屬性應該不用解釋了吧。質量越大,慣性越大,重力比例越小,受重力影響越小。

 

3)Fixed Angle:選中後物體會受重力影響,但不會因爲運動發生旋轉或滾動。

 

4)Is Kinematic(運動學):選中後物體會被認爲是運動學剛體,不受重力或碰撞的影響,保持由腳本動畫控制的運動。如果運動學剛體需要和其他物體發生交互,就要添加碰撞體組件。

 

5)Interpolate(插入)平滑遊戲對象的運動。當遊戲對象在運動時發生抖動時,可以使用Interpolate屬性來幫助平滑它的變換運動。設置爲Interpolate會根據上一幀所在位置進行平滑;而設置爲Extrapolate則會根據下一幀的預測位置進行平滑。

 

6)Sleeping Mode:控制剛體如何休眠來節約處理時間。

 

7)Collision Detection:控制rigidbody 2D的碰撞檢測機制。設置爲Discrete(離散類型)時,只有遊戲對象的碰撞體,在一個物理更新時與其他碰撞體接觸,纔會產生效果;Continuous(連續類型)適用於快速移動的物體,當遊戲對象在兩個物理更新之間可能發生碰撞的時候,就會產生碰撞事件。


 

Collider 2D

2D碰撞體組件

1)要在場景中擁有物理實體,一個遊戲對象必須使用碰撞體組件來定義它的外形,同時與相關的物理引擎交互。

對於所有參與2D物理交互的,並且靜態的物體,可以只添加2D碰撞體組件而不添加2D剛體組件(其實這個可以勾選Is Kinematic來處理)。而對於動態的物體,兩個組件都需要添加。

 

含有Collider和RigidBody的GameObject, Unity視之爲Dynamic(動態的)

只含有Collider的GameObject, Unity視之爲Static(靜態的)

 

如果Static的物體發生位移上的變化,Unity每一幀都會去重新緩存Static物體的Collider狀態,這會消耗資源

 

所以只含有Collider的物體,就不要讓他發生位置上的移動。或者給它加一個RigidBody的組件,把Gravity去掉,並且把IsKineMatic勾選上(該選項使得該物體不會因爲其他物體的影響而發生物理上的改變)。

 

2)2D碰撞體有四種:圓形碰撞體(circle)、方形碰撞體(box)、多邊形碰撞體(polygon)和邊緣碰撞體(edge)。這些碰撞器都繼承於同一個通用基礎的2D碰撞體,但每一種碰撞體都爲一種特定的形狀進行了優化。

 

3)多邊形碰撞體和邊緣碰撞體很相似,它們都由一組點或頂點,以及點之間的連線組成。不同的是多邊形碰撞體是閉合的,而邊緣碰撞體是開放的

多邊形碰撞體適用於形狀複雜的對象。

邊緣碰撞體適用於創造單個固定表面

 

4)所用碰撞體都有兩個相同的參數暴露在Inspector窗口:Is Trigger(是否爲觸發器)和Material(材質)。其餘獨有的參數用來定義特定的碰撞體形狀。

 

5)Is Trigger將碰撞體設置爲觸發器碰撞體。在一般的2D物理碰撞中,物理引擎會阻止碰撞體相互穿透,然而觸發器碰撞體並不參與這種碰撞,而且會發出觸發器信息,而不是碰撞信息。

 

6)Material是對2D碰撞體所用2D物理材質的引用。在Assets窗口中右擊,Creat Physics Material 2D即可新建2D物理材質。物理材質中有兩個參數——摩擦係數(friction)彈性係數(bounciness)

 

7)在場景內編輯碰撞體的形狀:

  1. 按住Shift鍵,碰撞體Gizmo會顯示出一些操作點,可以拖動操作點來改變碰撞體的形狀。
  2. 對於多邊形碰撞體和邊緣碰撞體,將鼠標放到邊上可以生成新的操作點。按住Ctrl鍵時可以刪除碰撞體上不需要的點或頂點。

 

Hinge Joint 2D

2D鉸鏈關節組件

1)hinge joint 2D使物體能夠圍繞場景中的某個點發生特殊的物理行爲。這個點可以是空白場景中的一個點,也可以是添加了剛體組件的遊戲對象。這個點由Connected Rigid Body和另外兩個錨點參數決定。

 

2)當鏈接到世界範圍或場景中的某個點時,Connected Rigid Body的位置留空,效果如(av3246302相應集數 00:57)。

當鏈接到某個遊戲對象時,Anchor設置攜帶運動對象運動的點(力的作用點),Connected Anchor設置運動對象運動的參照點(軸心)。

 

3)Collide Connected決定了遊戲對象是否忽略與被鏈接對象之間的碰撞。從現實角度來講,這個屬性一般需要勾選。

 

4)Use MotorUse Limitshinge joint 2D的獨有參數。

hinge joint 2D可以由一個馬達驅動,馬達的作用由Use Motor決定。Motor Speed是馬達要達到的目標速度,單位是rad/s。Maximum Motor Force是馬達爲達到目標速度可以施加的最大力矩。

hinge joint 2D的作用效果受Use Limits的影響。Lower Angle代表旋轉的最小角度,Upper Angle代表旋轉的最大角度。

巧妙搭配Use Motor和Use Limits可以實現有趣的物理效果,例如暗門。(av3246302相應集數 03:59)

鏈條的設計可以參照這集的最後部分。


 

Distance Joint 2D

2D距離關節組件

1)distance joint 2D可以對兩個遊戲對象間的距離添加一個強制的限制,而不是利用一個平緩的力來維持指定的距離。

 

2)Distance代表兩個對象之間需要利用關節保持的距離,Max Distance Only表示只保持最大距離。但是“只保持”的概念與“固定”不一樣,如果不勾選Max Distance Only,兩個對象間將以固定的距離作相對圓周運動。如果勾選Max Distance Only,當對象間的距離發生變化時,Unity會有一個作用力使它們一直運動直到達到Distance指定的距離。


 

Spring Joint 2D

2D彈簧關節組件

1)在受彈簧影響的物體上添加Spring Joint 2D。

 

2)Distance代表彈簧的長度,Frequency代表彈簧的強度值,強度值越高,彈簧恢復的速度越快。

 

3)Damping Ratio代表抑制彈簧反應的數值,取值範圍是0到1。數值越高,彈簧對遊戲對象的作用越小。


 

Area Effector 2D

2D區域效果器

1)在Unity裏,可以利用Area Effector 2D對某個區域內的2D對象添加物理作用力

 

2)在給對象添加Area Effector 2D前,對象必須要有2D碰撞體組件,而且碰撞體組件的屬性裏,Is Trigger(是否爲觸發器)Used by Effector(受效果器使用)必須勾選

如果Is Trigger不勾選,作用力只在目標碰撞體與作用源(區域效果器)接觸時生效,即對象無法進入區域效果器範圍。

 

3)Collider Mask允許用戶包括或排除受效果器作用力影響的層(layer)。

 

4)Force Direction代表作用力的方向,角度範圍是0度到359.99度,角度符合直角座標系的標準。當設置的數值爲負數時,角度以順時針旋轉。

 

5)Force Magnitude代表作用力的大小。

 

6)Force Variation允許用戶增加或減少一個隨機的量,範圍是0到指定數值。(這個概念還不是很清晰,下次做項目的時候再測試一下)

 

7)Drag和Angular Drag分別控制區域效果器內的線性阻力和角阻力。這些阻力會疊加在已經在對象剛體上設置過的阻力上。

 

8)Force Target表示作用力的作用對象。如果作用對象設置爲Rigidbody,作用力會施加在剛體質量的中心上,因此不會引起物體的旋轉。只有當作用對象設置爲Collider,本應在力的作用下旋轉的物體纔會旋轉起來,這時候調節Angular Drag纔有意義


 

Point Effector 2D

2D點效果器

1)point effector 2D也可以對區域內的2D對象添加物理作用力。它與area effector 2D不同的是,area effector 2D適用於推進氣流或傳送帶之類的場景,而point effector 2D適用於炸彈或黑洞之類的場景。

 

2)當Force Magnitude設置爲正數時,效果與炸彈爆炸類似。而設置爲負數時,效果與黑洞吸引類似。

 

3)Force Source設置爲Collider時允許用戶通過改變碰撞體組件中offset的值來改變物體被吸引的中心點位置。設置爲Rigidbody時,吸引中心點固定在剛體中心。

 

4)Force Mode有三種設置:

  1. Constant:作用力爲恆力。
  2. Inverse Linear:作用力大小基於作用源與作用對象的距離,距離越近,作用力越大。
  3. Inverse Squared:作用效果與Inverse Linear相似,只不過是基於距離的開平方。

 

5)Distance Scale可以改變距離的顯示比例,數值越高,實際的作用距離越遠。


 

路過的圈毛君:“這篇講的都是最基本的Unity物理引擎的知識,以後還會有更豐富的內容補充哦~(又挖一個坑???)”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章