unity不规则碰撞_Unity中的刚体和碰撞器
剛體
剛體作為物理引擎中的最基本組件,保證了所有物體受到重力的約束。包含有該類組件的游戲對象,會遵循萬有引力定律,在重力的作用下,使物體垂直下落。剛體組件還會影響物體發生碰撞時的反應,使物體遵循慣性定律,并在其他物體運動沖擊作用下產生速度或者形變。
為了利于開發者控制物理系統,Unity提供了多個屬性接口。開發者可以通過更改這些參數來控制物體的物理狀態。實際開發中,這些參數都被詳細地羅列在屬性查看器中,開發者很容易就可以對其進行更改。接下來對這些屬性進行介紹。
(1)質量(Mass)
該屬性表示剛體的質量,其數據類型是float,默認值為1。其在屬性查看器中的位置如圖6-1所示。該屬性的大小是有嚴格要求的,一般來說,大部分物體的質量屬性值接近0.1才符合日常生活的感官感受,一旦超過10.0,就會失去仿真所需達到的效果。
(2)平移阻力(Drag)
該屬性是物體的平移阻力,其數據類型是float,初始值為0。Drag屬性在屬性查看器中的位置如圖6-2所示。在現實生活中,物體會受到各方面的影響,速度會漸漸衰減,為了模擬這一效果,Unity設定了平移阻力屬性。這一屬性值越高,物體的速度衰減越嚴重。
(3)旋轉阻力(Angular Drag)
該屬性表示物體的旋轉阻力,其數據類型是float,初始值為0.05。其在屬性查看器中的位置如圖6-3所示。當一個物體進行旋轉的時候,其旋轉的角速度也會受各方面影響衰減,為模擬這一現象,Unity設定了旋轉阻力屬性。此屬性值越高,物體的角速度衰減越嚴重。圖6-1 質量
圖6-2 平移阻力
(4)使用重力(Use Gravity)
該屬性表示的是該物體是否受到重力的影響,其數據類型是boolean,初始值為true。其在屬性查看器中的位置如圖6-4所示。這一屬性被設為false時可以模擬物體在外太空狀態下的失重狀態。有時候也可以根據需要用于某些特殊的場合。圖6-3 旋轉阻力
圖6-4 使用重力
當該值被設定為false的時候,物體將不受重力影響,但剛體的其他特性還是存在的。
(5)是否遵循運動學(Is Kinematic)
該屬性表示本游戲對象是否遵循牛頓運動學物理定律,其數據類型是boolean,初始值為false。其在屬性查看器中的位置如圖6-5所示。如果該屬性被置為true,本物體的運動狀態將不受外力、碰撞和關節的影響,而只受到動畫以及附加在物體上的腳本的影響。
另外,雖然當該屬性被置為true時物體將不受物理定律的約束,但是該物體還是會影響其他的物體,改變其他物體的運動狀態。在游戲開發中此屬性會被經常用到,想象一下在第一人稱射擊游戲中,敵人被擊殺后會倒地不動,因為這個敵人對象Rigidbody的Is Kinematic屬性被設置為了true。
(6)插值(Interpolate)
該屬性表示的是該物體運動的插值模式。其在屬性查看器中的位置如圖6-6所示。在默認狀態下,插值Interpolate是被禁用的,可以選擇Interpolate模式,在此模式下物理引擎會在物體的運動幀之間進行插值,使得運動更加自然。圖6-5 是否遵循運動學
圖6-6 插值
不得不提的是,插值導致了物理模擬和渲染的不同步,進而產生物體輕微抖動的現象。建議在開發中,對主要角色使用插值,而其他的則禁用此功能,以達到折中效果。
(7)凍結旋轉(Freeze Rotation)
該屬性表示的是該物體的旋轉是否受到物理定律的約束。其在屬性查看器中的位置如圖6-7所示。默認狀態下任意軸的旋轉是受物理定律控制的。該屬性的值是修改在每個軸上的旋轉屬性來實現的,實際開發中可以靈活地使用。
在第一人稱射擊游戲中,通過此屬性去除物理屬性對旋轉的控制,可以使玩家完全控制視角旋轉。
(8)碰撞檢測模式(Collision Detection)
該屬性表示的是碰撞檢測模式。其在屬性查看器中的位置如圖6-8所示。默認狀態下,碰撞檢測模式是Discrete 。在沒有碰撞檢測的情況下,碰撞物體會穿過對方,產生所謂的“穿透”現象。為避免此類問題的發生,碰撞檢測工作是必須做的。圖6-7 凍結旋轉
圖6-8 碰撞檢測模式
關于碰撞模式的選擇,可選的有不連續模式(Discrete)、連續模式(Continuous)和動態連續模式(ContinuousDynamic),其中動態連續模式適用于高速運動的物體,但是耗費資源較大。連續模式僅僅可以用于球體、膠囊和盒子碰撞者的剛體,而且會嚴重影響物體的運動表現。所以大部分的物體采用不連續模式作為碰撞檢測模式。
碰撞器
碰撞器是Unity內建物理引擎中另外一個很重要的概念。弄清楚碰撞器的概念對于Unity開發新手來說是很重要的。
Unity中內建的碰撞器主要包括6種,具體情況如下所述。
盒子碰撞器——BoxCollider
盒子碰撞器是一個基本的方形碰撞器原型,可以被調整成不同大小的長方體,能夠很好地用于門、墻、平臺等,也能夠用于角色的軀干或者車輛等交通工具的外殼。
一般地,盒子碰撞器都是用于較規則的物體上,恰好將所作用的對象的主要部分包裹住。因此,適當的使用該碰撞器可以減少物理計算,提高性能。
球體碰撞器——SphereCollider
球體碰撞器是一個基本的球形碰撞器原型,在三維上可以均等地調節大小,但不能只改變某一維。適合用于落石、乒乓球、彈球等。
膠囊碰撞器——CapsuleCollider
膠囊碰撞器由一個圓柱體連接兩個半球體組成,是一個膠囊狀碰撞器原型。膠囊碰撞器的半徑和高度都可以單獨調節。可用于角色控制器或者和其他碰撞器結合用于不規則的形狀。
網格碰撞器——MeshCollider
網格碰撞器利用一個網格資源并在其上構建碰撞器。對于復雜網狀模型上的碰撞檢測,它要比應用原型碰撞器精確的多。其通過附加在游戲對象上的網格構建碰撞效果,并嚴格按照所附加對象的Transform屬性來設定其位置和大小比例。
車輪碰撞器——WheelCollider
車輪碰撞器是一個特殊的地面車輛碰撞器。其具有內置的碰撞檢測、車輪物理引擎和一個基于滑動的輪胎摩擦模型。當然,也可以用于其他對象,但其是專門為有輪子的車輛設計的。車輪的碰撞檢測是通過自身中心向外投射一條y軸方向的射線來實現的。
地形碰撞器——TerrianCollider
地形碰撞器主要作用于地形與其上的物體之間的碰撞,給地形加上地形碰撞器可以防止添加了剛體屬性的對象會無限的往下落。
說明:實際開發中,常常將多種碰撞器組合來使用,這樣可以保證碰撞的真實性。
摘自:《Unity 4 3D開發實戰詳解》一書
作者: 吳亞峰 , 杜化美 , 張月霞 , 索依娜
出處: http://www.epubit.com.cn/book/onlinechapter/11067
總結
以上是生活随笔為你收集整理的unity不规则碰撞_Unity中的刚体和碰撞器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getopt使用方法
- 下一篇: 用C++写出求矩形和圆形面积的程序