[專欄精選]Unity剛體詳解

本文節(jié)選自洪流學(xué)堂公眾號專欄《鄭洪智的Unity2018課》,未經(jīng)允許不可轉(zhuǎn)載嗅骄。

洪流學(xué)堂公眾號回復(fù)專欄胳挎,查看更多專欄文章。


洪流學(xué)堂溺森,讓你快人幾步慕爬。你好,我是鄭洪智屏积。

從這節(jié)課開始医窿,我會嘗試用一種新的寫作風(fēng)格,也希望大家能夠多提意見炊林。

背景補(bǔ)充

小新今年數(shù)學(xué)專業(yè)馬上大三了姥卢,卻一直沒有找到自己的職業(yè)方向,不知道以后要干什么渣聚,唯一的愛好就是玩游戲独榴,特別想自己能開發(fā)一款成功的游戲。小新趁著暑假去找各種實(shí)習(xí)兼職饵逐,一個偶然的機(jī)會收到了一個游戲公司的面試通知括眠。小新欣喜若狂,前去面試倍权,聊到游戲時掷豺,小新能滔滔不絕聊出很多東西捞烟,但是問到開發(fā)游戲的時候,卻啞口無言当船,無法回答面試官的問題题画。面試官問了很多游戲開發(fā)、Unity引擎的問題德频,小新就下定決心苍息,一定要好好學(xué)習(xí)一下游戲開發(fā),特別是Unity引擎壹置。小新找到了自己的師兄大智竞思,這位師兄有8年Unity開發(fā)經(jīng)驗(yàn),想向師兄請教一下學(xué)習(xí)的方向钞护。沒想到師兄特別熱情盖喷,是一個技術(shù)布道者,喜歡研究傳播技術(shù)难咕,從此小新跟著大智開啟了他的Unity學(xué)習(xí)之旅课梳。

大智告訴小新,叫我“大智”就好了余佃,以后不要叫師兄了哈暮刃。

Rigidbody 剛體

“大智,昨天我學(xué)習(xí)了物理系統(tǒng)爆土,知道了碰撞體椭懊,那物理系統(tǒng)里面還有別的東西么?”
“你呀步势,太天真了灾搏,Collider只是物理系統(tǒng)的一部分。你看昨天學(xué)的Collider立润,他們都只是一個靜態(tài)的碰撞體。我們昨天學(xué)習(xí)過物理系統(tǒng)很重要的是模擬物體的受力情況媳板,物體根據(jù)物理規(guī)則運(yùn)動呀桑腮。”
“那通過代碼修改物體的位置不就能運(yùn)動起來了么蛉幸?”
“通過代碼直接修改物體的位置并沒有通過受力的方式改變物體破讨,所以這種方式并沒有應(yīng)用到物理系統(tǒng),要想讓物體通過受力運(yùn)動奕纫,我們首先要了解一下Rigidbody組件提陶。物體只有添加了Rigidbody組件,才會對受力作出反應(yīng)匹层。小新隙笆,你現(xiàn)在先去看看Unity的文檔锌蓄,看看Rigidbody組件到底是什么吧!”
“收到撑柔,我馬上就去看瘸爽!”

小新馬上打開Unity文檔,找到了Rigidbody的介紹文檔https://docs.unity3d.com/Manual/RigidbodiesOverview.html铅忿。

Rigidbody組件可以讓一個物體受到物理影響剪决。比如添加Rigidbody組建后,物體會立馬對重力作出反應(yīng)檀训。如果物體上還添加了Collider柑潦,物體在受到碰撞時也會移動。

“大智峻凫,我知道了渗鬼!Rigidbody可以讓物體對受力做出反應(yīng),但是我有點(diǎn)和Collider搞不清楚了蔚晨≌ё辏”
“這兩個是初學(xué)者不太容易搞清楚的概念。Collider只是給物體加上了碰撞铭腕,讓物體擁有了實(shí)體银择,而不是一個可以穿過去‘全息投影’。而Rigidbody是讓物體擁有了動態(tài)受力的功能累舷。所以我們一般稱只有Collider沒有Rigidbody的物體叫靜態(tài)Collider浩考。一般剛體物體上也會有Collider,因?yàn)樾枰蛣e的物體發(fā)生碰撞被盈。如果沒有Collider析孽,即使剛體也不會和其他物體碰撞≈辉酰”
“那是不是不應(yīng)該給場景里所有的物體添加Rigidbody組件袜瞬?”
“非常對,場景里有一些物體是基本不會動的身堡,比如說一棟大樓邓尤,一塊大石頭等等,他們只需要阻擋別的物體別穿過他們就行了贴谎,所以它們只需要添加Collider就行汞扎。因?yàn)樘砑恿薘igidbody組件后會帶來很多的物理計算,所以只需要給會移動的物體添加Rigidbody就行擅这。
“我明白了澈魄!我說呢怎么給所有物體添加了Rigidbody后卡的跑不起來呢,我去把我的吃雞場景重新設(shè)置一下仲翎,嘿嘿痹扇!”
“你呀你呀铛漓,真是個急性子!順便好好看一下剛體組件的各個參數(shù)帘营!”
“知道啦票渠!”

Rigidbody組件

小新認(rèn)真看了Rigidbody組件的文檔,并做了筆記:

  • Mass 剛體的質(zhì)量芬迄,單位是千克(kg)
  • Drag 空氣阻力问顷,0代表沒有空氣阻力,無限大的值代表物體會立即停下來(慣性消失)禀梳。
  • Angular Drag 物體受到一個扭力旋轉(zhuǎn)時的阻力杜窄,0代表沒有阻力,但是需要注意的是無限大的值并不能讓物體立即停止旋轉(zhuǎn)算途。
  • Use Gravity 是否受重力影響
  • Is Kinematic 選中時塞耕,物體不會受到物理物理引擎的影響,只能通過修改Transform移動物體嘴瓤。
  • Interpolate 插值扫外,如果發(fā)現(xiàn)剛體移動有卡頓,可以嘗試選擇此選項廓脆。
    • None 不使用插值
    • Interpolate 根據(jù)上一幀的Transform進(jìn)行平滑
    • Extrapolate 根據(jù)估算的下一幀的Transform進(jìn)行平滑
  • Collision Detection 碰撞檢測的方式筛谚,當(dāng)你的剛體快速運(yùn)動時,可能會出現(xiàn)穿透的現(xiàn)象停忿,可以設(shè)置這個選項驾讲。
    • Discrete 離散檢測,性能較高席赂,默認(rèn)值
    • Continuous 連續(xù)檢測吮铭。使用此選項時,物體與其他動態(tài)Collider(剛體)使用離散檢測颅停;與其他靜態(tài)Collider使用連續(xù)檢測谓晌。如果其他剛體設(shè)置為了Continuous Dynamic,會使用連續(xù)檢測和這個剛體進(jìn)行碰撞檢測癞揉。這個選項非常影響性能扎谎,如果沒有快速運(yùn)動物體的碰撞檢測問題,保持Discrete設(shè)置
  • Continuous Dynamic 動態(tài)連續(xù)檢測烧董。如果其他物體是Continuous或Continuous Dynamic,與這個物體碰撞時會使用連續(xù)檢測胧奔。也會和靜態(tài)Collider使用連續(xù)檢測逊移。對于其他的collider(標(biāo)記為Discrete的Rigidbody)使用離散檢測。龙填。用于快速移動的物體胳泉。
  • Constraints 約束剛體的運(yùn)動
    • Freeze Position 選中后剛體不會在對應(yīng)的軸上移動
  • Freeze Rotation 選中后剛體不會在對應(yīng)的軸上旋轉(zhuǎn)

小新看完之后拐叉,還是有一些地方不太清楚,又來騷擾大智扇商。
“大智凤瘦,剛體的Is Kinematic我明白了是什么,這個有什么用呢案铺?加上剛體不就是為了受力么蔬芥,為什么還要提供一個這個屬性,關(guān)掉受力呢控汉?”
“有些情況笔诵,我們不想讓物體受力,但是仍然能夠和其他物體發(fā)生碰撞姑子,影響其他物體乎婿。比如這個物體上有動畫,在播放動畫的時候街佑,我們想讓動畫來控制物體的位置谢翎。”
“明白了沐旨,但是感覺還是需要用到的時候再去理解森逮。那這個Collision Detection該什么時候設(shè)置呢?是不是類似子彈這種情況希俩?”
“說的很對吊宋,Collision Detection就是針對快速移動的小物體,比如說子彈颜武,但是通常游戲射擊并不用實(shí)體的子彈璃搜,因?yàn)樽訌椂嗟臅r候性能太差了,我可以給你推薦一個文章來看看:https://zhuanlan.zhihu.com/p/22105641
“謝謝智哥鳞上,我也發(fā)現(xiàn)了用剛體的話性能太差了这吻,我去看看”

碰撞匯總

“大智,我發(fā)現(xiàn)有些情況兩個物體發(fā)生了碰撞篙议,但是并沒有調(diào)用腳本中的代碼唾糯,這是怎么回事?”
“哈哈鬼贱,這時候我就要祭出大招了移怯,給你兩個表格,對照著看看是否會發(fā)生碰撞哈这难≈畚螅”

OnCollision消息
OnTrigger消息

“太好了,有了這兩個表格姻乓,能不能獲取到消息就很清晰了嵌溢!”

總結(jié)

“我來簡單總結(jié)一下眯牧,今天這個Rigidbody組件是物理系統(tǒng)中非常重要的組件,運(yùn)動的物體都靠它赖草,遇到問題多去查Unity的文檔学少,里面解釋的很清楚⊙砥铮”
“好版确,我已經(jīng)掌握的差不多了,下一步就是在我的吃雞游戲里運(yùn)用一下腿堤,嘿嘿”

今日思考題

“既然你說到了運(yùn)用阀坏,我要給你布置一個小作業(yè),用代碼控制一個剛體在不平整的地形上運(yùn)動笆檀,試試看忌堂!”
“收到!我去也酗洒!”
“收獲別忘了分享出來士修!也別忘了分享給你學(xué)Unity的朋友,也許能夠幫到他樱衷∑宄埃”

洪流學(xué)堂公眾號回復(fù)專欄,查看更多專欄文章矩桂。



《鄭洪智的Unity2018課》沸移,傾盡我8年的開發(fā)經(jīng)驗(yàn),結(jié)合最新的Unity2018侄榴,帶你從入門到精通雹锣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市癞蚕,隨后出現(xiàn)的幾起案子蕊爵,更是在濱河造成了極大的恐慌,老刑警劉巖桦山,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攒射,死亡現(xiàn)場離奇詭異,居然都是意外死亡恒水,警方通過查閱死者的電腦和手機(jī)会放,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钉凌,“玉大人咧最,你說我怎么就攤上這事。” “怎么了窗市?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饮笛。 經(jīng)常有香客問我咨察,道長,這世上最難降的妖魔是什么福青? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任摄狱,我火速辦了婚禮,結(jié)果婚禮上无午,老公的妹妹穿的比我還像新娘媒役。我一直安慰自己,他們只是感情好宪迟,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布酣衷。 她就那樣靜靜地躺著,像睡著了一般次泽。 火紅的嫁衣襯著肌膚如雪穿仪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天意荤,我揣著相機(jī)與錄音啊片,去河邊找鬼。 笑死玖像,一個胖子當(dāng)著我的面吹牛紫谷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捐寥,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼笤昨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了上真?” 一聲冷哼從身側(cè)響起咬腋,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睡互,沒想到半個月后根竿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡就珠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年寇壳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妻怎。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡壳炎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匿辩,我是刑警寧澤腰耙,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站铲球,受9級特大地震影響挺庞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稼病,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一选侨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧然走,春花似錦援制、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啄巧,卻和暖如春寻歧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秩仆。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工码泛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澄耍。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓噪珊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親齐莲。 傳聞我的和親對象是個殘疾皇子痢站,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

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