Unity物理系統(tǒng)筆記

Unity 3D物理引擎使用的是已經(jīng)開源的PhysX粤剧。下面是這幾天學(xué)習(xí)的筆記奕污。

碰撞

參與碰撞的對(duì)象

參與碰撞的對(duì)象有3種:

  • 靜態(tài)碰撞器(有Collider沒有RigidBody)
  • 剛體(有Collider有RigidBody)
  • 運(yùn)動(dòng)學(xué)剛體(有Collider有RigidBody并且RigidBody的參數(shù)Is Kinematic為true)
    注意:子物體有Collider就算有Collider,掛載RigidBody組件的對(duì)象不一定要有Collider按厘。
    參與物理碰撞的對(duì)象必然是上面三種對(duì)象之一医吊。
    靜態(tài)碰撞器最好理解,不想移動(dòng)但需要參與碰撞的物體(場(chǎng)景中的障礙等)逮京,不會(huì)因?yàn)榕鲎舶l(fā)生位移卿堂。
    剛體理論上是完全依靠物理系統(tǒng)驅(qū)動(dòng)的對(duì)象,剛體有專門的位移方法(AddForce懒棉,MovePosition或者直接指定速度)草描,不要直接設(shè)置Transform,否則你會(huì)發(fā)現(xiàn)物體的運(yùn)動(dòng)跟你預(yù)想的不同策严。
    運(yùn)動(dòng)學(xué)剛體我更愿意理解為可以調(diào)整Transform但同時(shí)又可以參與碰撞的對(duì)象穗慕。他可以通過設(shè)置Is Kinematic在普通物體和剛體之間切換。
    運(yùn)動(dòng)學(xué)剛體的應(yīng)用場(chǎng)景(官方舉例):
  • 布娃娃系統(tǒng):通過Transform控制動(dòng)力學(xué)剛體的位移妻导,在碰撞發(fā)生后設(shè)置 Is Kinematic為false逛绵,這樣這個(gè)物體就會(huì)發(fā)生碰撞(飛出去)。
  • 門:通常情況下是不會(huì)動(dòng)的(運(yùn)動(dòng)學(xué)剛體)倔韭,但是需要的時(shí)候可以被打開(碰撞后改成剛體术浪,有真實(shí)的運(yùn)動(dòng)效果)

休眠和喚醒

首先休眠與否是針對(duì)剛體而言,靜態(tài)碰撞器沒有休眠一說寿酌。對(duì)于已經(jīng)休眠的剛體胰苏,物理系統(tǒng)將會(huì)停止對(duì)他們的計(jì)算。
進(jìn)入休眠的幾種方式:

  • 速度小于一定的值醇疼,跟剛體是否受力無關(guān)硕并。
  • RigidBody.Sleep()法焰。注意這個(gè)方法只能讓剛體休眠一幀,但是是否可以一直休眠下去倔毙,就要看下一幀物理系統(tǒng)檢測(cè)的時(shí)候判定該剛體是否能進(jìn)入休眠壶栋。
    對(duì)于第一條,進(jìn)入休眠的特定速度是可調(diào)的普监,可以通過Project Setting/Physics里面的Sleep Threshold設(shè)置,注意這個(gè)值不是指速度低于這個(gè)值會(huì)休眠琉兜,而是物體的動(dòng)能除以質(zhì)量小于這個(gè)值就會(huì)休眠凯正。
    下面放個(gè)動(dòng)能公式:

E_k=\frac{1}{2}mv^2

Sleep Threshold的默認(rèn)值是0.005,即默認(rèn)速度小于0.1的時(shí)候會(huì)進(jìn)入休眠豌蟋。
休眠的目的是節(jié)省物理系統(tǒng)的一些開銷廊散。
可以通過以下幾種方式喚醒剛體:

  • 給剛體施加力,包括摩擦力等梧疲。比如和另一個(gè)物體發(fā)生碰撞允睹。運(yùn)動(dòng)學(xué)剛體即使通過Transform移動(dòng),也一樣可以對(duì)其他剛體施加力幌氮。
  • RigidBody.AddForce()缭受。本質(zhì)上也是給剛體施加力。
  • RigidBody.WakeUp()该互。
    移動(dòng)靜態(tài)碰撞器不會(huì)喚醒已休眠的剛體(實(shí)際測(cè)試的時(shí)候發(fā)現(xiàn)還是有可能喚醒剛體的米者,不過結(jié)果有不確定性)。
    運(yùn)動(dòng)學(xué)剛體也會(huì)休眠和被喚醒宇智,通過Transform移動(dòng)它就可以喚醒蔓搞。

碰撞行為矩陣

上圖是unity官方總結(jié)的是否可以發(fā)生碰撞行為的條件。其實(shí)可以用很簡(jiǎn)單的一句話概括:碰撞雙方必須有一個(gè)是非運(yùn)動(dòng)學(xué)剛體(普通剛體)随橘。
幾個(gè)注意:

  • AddForce只能用于非運(yùn)動(dòng)學(xué)剛體喂分,對(duì)于運(yùn)動(dòng)學(xué)剛體調(diào)用AddForce沒反應(yīng)。
  • 對(duì)于運(yùn)動(dòng)學(xué)剛體机蔗,可以直接調(diào)用Transform調(diào)整蒲祈,也可以通過RigidBody.Position和RigidBody.Rotation調(diào)整。通過RigidBody調(diào)整效率要優(yōu)于通過Transform調(diào)整蜒车。因?yàn)閯傮w的位移和旋轉(zhuǎn)會(huì)導(dǎo)致其下的碰撞器也發(fā)生改變讳嘱,如果通過前者調(diào)整,所有的改變將會(huì)在物理系統(tǒng)里一次性處理酿愧,而后者不在物理系統(tǒng)中沥潭,將會(huì)重新計(jì)算所有的碰撞器,并再次調(diào)用物理系統(tǒng)(猜的)嬉挡。
  • 如果要持續(xù)的移動(dòng)非運(yùn)動(dòng)剛體钝鸽,可以用MovePosition方法汇恤,該方法會(huì)根據(jù)插值的設(shè)置進(jìn)行更平滑的運(yùn)動(dòng)。不過插值的設(shè)置通常是none拔恰,官方建議只給主角設(shè)置插值因谎,因?yàn)槲锢硐到y(tǒng)和渲染不一定同步,渲染時(shí)可能會(huì)出現(xiàn)卡頓或者跳幀颜懊,插值只是根據(jù)上一幀/下一幀(Interpolate\Extrapolate)的運(yùn)動(dòng)對(duì)Transform進(jìn)行平滑而已财岔。
  • 運(yùn)動(dòng)學(xué)剛體和鎖定XYZ的剛體可以觸發(fā)碰撞(有碰撞消息),但會(huì)發(fā)生穿插河爹。

觸發(fā)器

觸發(fā)器就是在碰撞器的基礎(chǔ)上匠璧,將碰撞器的isTrigger選項(xiàng)打開。
所有的觸發(fā)器都不會(huì)發(fā)生碰撞咸这,只是會(huì)收到觸發(fā)消息夷恍。

觸發(fā)矩陣


表格有點(diǎn)復(fù)雜,其實(shí)觸發(fā)器觸發(fā)的條件也很簡(jiǎn)單:碰撞雙方必須有一個(gè)剛體(包含運(yùn)動(dòng)學(xué)剛體)和一個(gè)Trigger媳维,剛體和Trigger可以不在同一個(gè)物體上酿雪,也可以在同一個(gè)物體上(比如剛體觸發(fā)器RigidBody Trigger和運(yùn)動(dòng)學(xué)剛體觸發(fā)器Kinematic RigidBody Trigger),對(duì)于在同一個(gè)物體上的觸發(fā)器侄刽,就可以跟任何觸發(fā)器/碰撞器觸發(fā)了指黎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市州丹,隨后出現(xiàn)的幾起案子袋励,更是在濱河造成了極大的恐慌,老刑警劉巖当叭,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茬故,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蚁鳖,警方通過查閱死者的電腦和手機(jī)磺芭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醉箕,“玉大人钾腺,你說我怎么就攤上這事〖タ悖” “怎么了放棒?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)己英。 經(jīng)常有香客問我间螟,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任厢破,我火速辦了婚禮荣瑟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摩泪。我一直安慰自己笆焰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布见坑。 她就那樣靜靜地躺著嚷掠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荞驴。 梳的紋絲不亂的頭發(fā)上叠国,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音戴尸,去河邊找鬼。 笑死冤狡,一個(gè)胖子當(dāng)著我的面吹牛孙蒙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悲雳,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挎峦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了合瓢?” 一聲冷哼從身側(cè)響起坦胶,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晴楔,沒想到半個(gè)月后顿苇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡税弃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纪岁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片则果。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幔翰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出西壮,到底是詐尸還是另有隱情遗增,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布款青,位于F島的核電站做修,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缓待,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一蚓耽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旋炒,春花似錦步悠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铣除,卻和暖如春谚咬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尚粘。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工择卦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人郎嫁。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓秉继,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親泽铛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尚辑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容