跟諸子學游戲 Unity3d碰撞器與觸發(fā)器的區(qū)別

要產生碰撞必須為游戲對象添加剛體(Rigidbody)和(各種類型的3D/2D)碰撞器(Collider),剛體可以讓物體在物理影響下運動.下面先講3D情況下:

兩個物體都必須帶有碰撞器(Collider),運動的物體還必須帶有Rigidbody剛體夺溢。

在unity3d中是己,能檢測碰撞發(fā)生的方式有兩種跺撼,一種是利用碰撞器租谈,另一種則是利用觸發(fā)器.

碰撞器:一群組件撮执,它包含了很多種類孵奶,比如:Box Collider(盒碰撞體)司忱,Mesh Collider(網格碰撞體)等,這些碰撞器應用的場合不同锄蹂,但都必須加到GameObjecet身上氓仲。

觸發(fā)器,只需要在檢視面板中的碰撞器組件中勾選IsTrigger屬性選擇框得糜。

觸發(fā)信息檢測:當Is Trigger=true時敬扛,碰撞器被物理引擎所忽略,沒有碰撞效果朝抖,可以調用OnTriggerEnter/Stay/Exit函數啥箭。

1.MonoBehaviour.OnTriggerEnter(Collider collider)當進入觸發(fā)器

2.MonoBehaviour.OnTriggerExit(Collider collider)當退出觸發(fā)器

3.MonoBehaviour.OnTriggerStay(Collider collider)當逗留觸發(fā)器


碰撞信息檢測:當Is Trigger=false時,碰撞器根據物理引擎引發(fā)碰撞治宣,產生碰撞的效果急侥,可以調用OnCollisionEnter/Stay/Exit函數砌滞;

1.MonoBehaviour.OnCollisionEnter(Collision collision) 當進入碰撞器

2.MonoBehaviour.OnCollisionExit(Collision collision) 當退出碰撞器

3.MonoBehaviour.OnCollisionStay(Collision collision)? 當逗留碰撞器


collider的性能和效率大概的順序是:Sphere Collider > Capsule > Box Collider > Mesh Collider

碰撞器是另一種組件,它和剛體一起坏怪,來使碰撞發(fā)生贝润。如果兩個剛體撞在一起,物理引擎將不會計算碰撞除非它們包含一個碰撞器組件陕悬。沒有碰撞器的剛體,會在物理模擬中相互穿透按傅。碰撞器必須獨立于剛體加在對象上捉超。碰撞器并不一定需要附加剛體,但是要使移動物體具有碰撞效果必須附加剛體唯绍。為了使兩個觸發(fā)器碰撞時發(fā)出碰撞事件拼岳,其中一個必須包含剛體。

網格碰撞器之間通常不相互碰撞况芒,但如果一個網格碰撞器被標記為凸起的(Convex )惜纸,那么它就可以與其他網格碰撞器碰撞,對移動的對象使用基本/組合碰撞器,而對靜態(tài)環(huán)境對象使用網格碰撞器绝骚。碰撞網格使用背面剔除(或譯背面揀選耐版,指正面多邊形擋住了在它后面的背面多邊形,Direct3D將通過揀選(即刪除多余的處理過程)背面多邊形來提高效率的過程。)如果一個對象和被背面剔除的網格碰撞压汪,那也不會在物理上碰撞粪牲。

Unity組件文中將碰撞體分為3個類型:

1:Static Collider 靜態(tài)碰撞器

指的是沒有附加剛體而附加了碰撞器的游戲對象。這類對象會保持靜止或者很輕微的移動止剖。對于環(huán)境模型十分好用腺阳,當和剛體碰撞時而不會移動。

2:Rigidbody Collider 剛體碰撞器

指的是同時附加了剛體和碰撞器的游戲對象穿香。通過腳本的力量和碰撞完全受物理引擎的影響亭引。可以和只包含碰撞器的游戲對象碰撞皮获。將會成為你游戲中使用物理效果的基本類型碰撞器焙蚓。

3:Kinematic Rigidbody Collider 運動學剛體碰撞器

指的是同時包含碰撞器和剛體,并且激活IsKinematic的一類游戲對象洒宝,要移動這類游戲對象主届,要修改它的Transform組件(指的是position和rotation這類屬性),而不是用力待德。它們很像靜態(tài)碰撞器君丁,不過如果你想要不停地到處移動碰撞器,它們會更好用将宪。這類游戲對象還有許多其他的獨特使用情景绘闷。

運動學剛體碰撞器是個非常懶惰和霸道的家伙橡庞,它碰到其他碰撞器完全沒有反應(其實還是有點反應,會觸發(fā)一些碰撞函數的印蔗,后面有解釋)扒最。它不受力、重力或扭矩的影響华嘹“扇ぃ可以通過設置Transform 的position和rotation來準確的操作它們或者讓它們動起來,但是耙厚,它們可以和其他的非運動學剛體互相作用强挫。對于放在運動學剛體碰撞器上面的剛體,會受到運動學剛體施加的摩擦力薛躬。

4:Character Controllers 角色控制器

如果想制作一個類似人的角色那就使用角色控制器俯渤。這可以是第三人稱平臺游戲、第一人稱射擊游戲的主要角色或任何敵對角色型宝。

這類控制器不遵循物理規(guī)則因此它感覺上不對勁(在Doom中八匠,你跑到了90英里每小時,然后馬上停下而且可以極快的轉身)趴酣。不過梨树,角色控制器執(zhí)行碰撞檢測以保證你的角色可以沿著墻滑動,上下臺階等等岖寞。

角色控制器不受力影響(但是重力效果還是有的)但是可以被由代碼施加的力推動劝萤。通常,所有類似人的角色都用角色控制器來執(zhí)行慎璧。

角色控制器本身不具物理特性床嫌,因此如果想應用真正的物理作用——在繩上搖擺,被大石頭推動——到你的角色胸私,必須用剛體厌处,這會允許你把鉸鏈或力用到你的角色上。角色控制器永遠沿Y軸對齊岁疼,因此阔涉,如果你的角色需要在空間中改變方向那也必須用到剛體(比如在變化的引力控制下)。但是捷绒,要意識到調整一個剛體在角色上表現自然是很難的瑰排,因為游戲角色自身的非物理特性總想表現出來。另一個困難是暖侨,角色控制器可以從特定高度的臺階上平滑地滑下椭住,而剛體不會。

控制器不會對加在它自身上的力做出反應字逗,也不會自動推開其他剛體京郑。(這里我沒有明白宅广,因為我實驗過在一個剛體內部實例化一個控制器,剛體是會被彈開的些举。如果有人懂請告訴我跟狱,不勝感激!)

如果想讓角色控制器推開其他剛體或者對象户魏,你可以在對象附加的腳本中添加OnControllerColliderHit()函數驶臊,這樣對它們施加力就能夠產生碰撞。

也就是說叼丑,角色控制器可以使用物理效果影響其他對象关翎,前提是你自己寫了腳本。

而角色控制器不能通過物理效果被其他對象影響幢码。因此笤休,如果你想讓你的游戲角色被物理效果影響尖飞,那就最好使用剛體而不是角色控制器症副。

角色控制器和運動學剛體有點像,因為它們都不受力的作用(運動學剛體更像是一個剛體政基,只是不會受到其他任何外力的影響贞铣,就像是古代的國王,雖然和普通平民一樣都是人沮明,但是只能他欺負別人辕坝,別人無法欺負他;而角色控制器本身就不具有物理特性荐健,不可以推開別人(除非寫了自己的腳本)酱畅,也不會被別人影響,只是它可以執(zhí)行碰撞檢測)江场。但是也有幾點不同的地方纺酸。首先,運動學剛體是無法通過代碼施加力的作用來推動址否,但是角色控制器是可以的餐蔬。第二,運動學剛體不會受到重力的作用佑附,而角色控制器是有重力效果的樊诺。其次,角色控制器只能沿Y軸旋轉音同,也就是人永遠都是直立狀態(tài)词爬,不會因為受到力的作用就趴下啦,而剛體是可以的权均。第三缸夹,角色控制器可以從特定高度臺階上平滑地滑下痪寻,而剛體不會。

剛體休眠:靜止的剛體會進入休眠虽惭。例如橡类,當一個正方體掉到地板上靜止后就會進入剛體休眠.剛體休眠完全自動發(fā)生,只要剛體的速度低于sleepAngularVelocity和sleepVelocity,該剛體就會開始休眠.其空閑一些幀后芽唇,就會被設置成休眠狀態(tài),處于休眠狀態(tài)中的物體顾画,不會再對其進行碰撞檢測和模擬。這會節(jié)約大量的CPU開銷匆笤。移動的靜態(tài)碰撞器無法喚醒它.運動學剛體由于會對剛體產生力的作用而可以喚醒休眠中的剛體.

實例:都是A物體去撞B物體

一研侣、A(碰撞體),B(沒有碰撞體炮捧,無論有沒有剛體)庶诡,沒有觸發(fā)事件。

二咆课、A(碰撞體)末誓,B(碰撞體),沒有觸發(fā)事件书蚪。

二喇澡、A(碰撞體和剛體,開啟IsTrigger)殊校,B(碰撞體晴玖,關閉IsTrigger),雙方都能收到觸發(fā)事件为流。

三呕屎、A(碰撞體和剛體,關閉IsTrigger)敬察,B(碰撞體秀睛,開啟IsTrigger),雙方都能收到觸發(fā)事件静汤。

四琅催、A (碰撞體,關閉IsTrigger)虫给,B(碰撞體和剛體藤抡,開啟IsTrigger),沒有觸發(fā)事件抹估。

五缠黍、A (碰撞體,開啟IsTrigger)药蜻,B(碰撞體和剛體瓷式,關閉IsTrigger)替饿,沒有觸發(fā)事件。

只要A有帶有碰撞體和剛體,正在運動,B帶有碰撞體,不管是A撞B還是B撞A,A和B至少一個開啟了IsTrigger,都會觸發(fā)事件.

結論:產生觸發(fā)事件的兩個物體會相互穿越贸典,準確的說是因為開啟IsTrigger那個物體會被物理引擎鎖忽略掉视卢,所以會產生兩個物體穿越的情況。兩個對象要么都收到碰撞事件廊驼,要么都收到觸發(fā)事件据过,不會出現一個收到觸發(fā)事件,一個收到碰撞事件的情況妒挎。要使用AddForce/AddTorque利用物理引擎去操作,如果直接設置坐標,2個物體產生碰撞,但是會穿越彼此.

關于各種Collider的效率高低排序為

sphere Collider> capsule collider> box Collider> mesh Collider

參考:http://www.ceeger.com/Manual/Physics.html? ?

https://docs.unity3d.com/Manual/PhysicsSection.html

http://www.cnblogs.com/slysky/p/4290803.html


pc:Physics.Raycast()方法中,源頭一般是攝像機,方向一般是從屏幕方向射向內部3D空間,用屏幕坐標轉向視口坐標Camera.main.ScreenToViewportPoint表示方向,RaycastHit hit信息,設置LayerMask.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末绳锅,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子酝掩,更是在濱河造成了極大的恐慌鳞芙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件期虾,死亡現場離奇詭異原朝,居然都是意外死亡,警方通過查閱死者的電腦和手機彻消,發(fā)現死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門竿拆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宙拉,“玉大人宾尚,你說我怎么就攤上這事⌒怀海” “怎么了煌贴?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锥忿。 經常有香客問我牛郑,道長,這世上最難降的妖魔是什么敬鬓? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任淹朋,我火速辦了婚禮,結果婚禮上钉答,老公的妹妹穿的比我還像新娘础芍。我一直安慰自己,他們只是感情好数尿,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布仑性。 她就那樣靜靜地躺著,像睡著了一般右蹦。 火紅的嫁衣襯著肌膚如雪诊杆。 梳的紋絲不亂的頭發(fā)上歼捐,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音晨汹,去河邊找鬼豹储。 笑死,一個胖子當著我的面吹牛淘这,可吹牛的內容都是我干的颂翼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慨灭,長吁一口氣:“原來是場噩夢啊……” “哼朦乏!你這毒婦竟也來了?” 一聲冷哼從身側響起氧骤,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呻疹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筹陵,有當地人在樹林里發(fā)現了一具尸體刽锤,經...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年朦佩,在試婚紗的時候發(fā)現自己被綠了并思。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡语稠,死狀恐怖宋彼,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情仙畦,我是刑警寧澤输涕,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站慨畸,受9級特大地震影響,放射性物質發(fā)生泄漏寸士。R本人自食惡果不足惜弱卡,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搭综。 院中可真熱鬧条获,春花似錦帅掘、人聲如沸修档。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽照激。三九已至,卻和暖如春吆寨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俺孙。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工想帅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旨剥,地道東北人轨帜。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親囤躁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容