《Unity虛擬現(xiàn)實(shí)開(kāi)發(fā)實(shí)踐》Unity-物理系統(tǒng)-_第1頁(yè)
《Unity虛擬現(xiàn)實(shí)開(kāi)發(fā)實(shí)踐》Unity-物理系統(tǒng)-_第2頁(yè)
《Unity虛擬現(xiàn)實(shí)開(kāi)發(fā)實(shí)踐》Unity-物理系統(tǒng)-_第3頁(yè)
《Unity虛擬現(xiàn)實(shí)開(kāi)發(fā)實(shí)踐》Unity-物理系統(tǒng)-_第4頁(yè)
《Unity虛擬現(xiàn)實(shí)開(kāi)發(fā)實(shí)踐》Unity-物理系統(tǒng)-_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章Unity物理系統(tǒng)物理系統(tǒng)的核心組件物理射線的用法Helicopter實(shí)戰(zhàn):直升機(jī)收集物資物理系統(tǒng)的核心組件物理射線的用法Helicopter實(shí)戰(zhàn):直升機(jī)收集物資8.28.38.1?點(diǎn)擊查看本小節(jié)知識(shí)架構(gòu)?點(diǎn)擊查看本小節(jié)知識(shí)架構(gòu)?點(diǎn)擊查看本小節(jié)知識(shí)架構(gòu)學(xué)習(xí)目標(biāo)了解掌握掌握了解Unity物理系統(tǒng)各功能模塊12掌握物理系統(tǒng)的核心組件的使用3掌握物理系統(tǒng)常用API的使用NVIDIA(英偉達(dá))是一家頗負(fù)盛名的人工智能計(jì)算公司,該公司發(fā)明了GPU,極大地推動(dòng)了PC游戲市場(chǎng)的發(fā)展,重新定義了現(xiàn)代計(jì)算機(jī)圖形技術(shù)。同屬該公司產(chǎn)品的PhysX引擎是目前使用最為廣泛的物理運(yùn)算引擎之一,被很多游戲大作采用。同樣,Unity的物理系統(tǒng)強(qiáng)大也是因?yàn)閁nity內(nèi)置了PhysX物理引擎。開(kāi)發(fā)者可以更方便地通過(guò)Unity的物理系統(tǒng)高效、逼真地模擬剛體碰撞、車(chē)輛駕駛、布料、重力等物理效果,使游戲畫(huà)面更加真實(shí)而生動(dòng)。8.1物理系統(tǒng)的核心組件8.1.1剛體返回目錄8.1.2碰撞器8.1.3關(guān)節(jié)8.1.4布料系統(tǒng)8.1物理系統(tǒng)的核心組件8.1.5恒力返回目錄8.1.6物理材質(zhì)8.1.7角色控制器8.1物理系統(tǒng)的核心組件在Unity場(chǎng)景中,想讓一個(gè)物體具有某項(xiàng)物理屬性,比如重力、彈力、離心力等,通常是以給該物體添加組件的方式實(shí)現(xiàn)。Unity物理系統(tǒng)包含很多作用于物體物理屬性的組件,如剛體、碰撞體、關(guān)節(jié)、布料等,下面具體介紹這些組件的使用方法。8.1.1剛體剛體(Rigidbody)是為物體啟用物理行為的主要組件。一個(gè)游戲?qū)ο筇砑觿傮w組件后,Unity引擎就會(huì)立即對(duì)該物體進(jìn)行物理效果的模擬,例如,新添加剛體組件的物體會(huì)立即響應(yīng)重力。Rigidbody組件除了讓物體直接響應(yīng)重力外,還可以設(shè)置其他物理屬性。默認(rèn)的Rigidbody組件界面如下圖所示。下面具體介紹Rigidbody組件包含的屬性信息,如表所示。8.1.1剛體屬性功能Mass物體的質(zhì)量(默認(rèn)單位為kg)Drag物體受力移動(dòng)時(shí)承受的空氣阻力。0表示沒(méi)有空氣阻力,無(wú)窮大使物體立即停止運(yùn)動(dòng)AngularDrag物體在扭矩旋轉(zhuǎn)下承受的空氣阻力。0表示沒(méi)有空氣阻力。注意,僅通過(guò)將比值設(shè)置為無(wú)窮大,無(wú)法使對(duì)象停止旋轉(zhuǎn)UseGravity啟用后,則物體受到重力影響IsKinematic如果啟用,對(duì)象將不會(huì)被物理引擎驅(qū)動(dòng),并且只能通過(guò)其Transform進(jìn)行操作。這對(duì)于移動(dòng)平臺(tái)或?yàn)楦郊恿薍ingeJoint的Rigidbody設(shè)置動(dòng)畫(huà)非常有用Interpolate只有在剛體運(yùn)動(dòng)中看到急動(dòng)時(shí)才嘗試其中一個(gè)選項(xiàng)None無(wú)應(yīng)用插值Interpolate基于前一幀的變換平滑Extrapolate基于下一幀的估計(jì)變換對(duì)變換進(jìn)行平滑CollisionDetection用于防止快速移動(dòng)的對(duì)象通過(guò)其他對(duì)象而不檢測(cè)碰撞Discrete對(duì)場(chǎng)景中的所有其他碰撞器使用離散碰撞檢測(cè)。其他碰撞器在檢測(cè)碰撞時(shí)會(huì)使用離散碰撞檢測(cè)。用于正常碰撞(這是默認(rèn)值)Continuous對(duì)動(dòng)態(tài)碰撞器(帶有剛體)使用離散碰撞檢測(cè),并對(duì)靜態(tài)網(wǎng)格碰撞器(沒(méi)有剛體)進(jìn)行連續(xù)碰撞檢測(cè)。設(shè)置為ContinuousDynamic的剛體將在檢測(cè)與該剛體的碰撞時(shí)使用連續(xù)碰撞檢測(cè)。其他剛體將使用離散碰撞檢測(cè)。用于連續(xù)動(dòng)態(tài)檢測(cè)需要與之碰撞的對(duì)象。(這對(duì)物理性能有很大影響,如果沒(méi)有快速對(duì)象碰撞的問(wèn)題,將其設(shè)置為離散)ContinuousDynamic對(duì)設(shè)置為連續(xù)和連續(xù)動(dòng)態(tài)碰撞的對(duì)象使用連續(xù)碰撞檢測(cè)。它還將對(duì)靜態(tài)網(wǎng)格碰撞器(沒(méi)有剛體)使用連續(xù)碰撞檢測(cè)。對(duì)于所有其他對(duì)撞機(jī),它使用離散碰撞檢測(cè)。用于快速移動(dòng)的物體Constraints對(duì)剛體移動(dòng)的限制FreezePosition阻止剛體選擇性地在世界空間X,Y和Z軸上移動(dòng)FreezeRotation阻止剛體圍繞本地空間X,Y和Z軸旋轉(zhuǎn)的剛體8.1.1剛體這里有兩點(diǎn)需要注意。(1)由于Rigidbody組件接管了附加到GameObject的移動(dòng),因此用戶不應(yīng)嘗試通過(guò)更改Transform屬性(如位置和旋轉(zhuǎn))來(lái)從腳本移動(dòng)它。相反,用戶應(yīng)該使用力來(lái)推動(dòng)GameObject并讓物理引擎計(jì)算結(jié)果。(2)Rigidbody組件有一個(gè)名為IsKinematic的屬性,勾選該屬性后,對(duì)象將從物理引擎的控制中刪除,并允許通過(guò)腳本控制移動(dòng)。該屬性決定對(duì)象是碰撞器還是觸發(fā)器。這里需要注意的是,可以從腳本中更改IsKinematic的值,以允許為對(duì)象打開(kāi)和關(guān)閉物理引擎,但這會(huì)帶來(lái)性能開(kāi)銷,應(yīng)該謹(jǐn)慎使用。8.1.2碰撞器碰撞器(Collider)組件定義物體的形狀用于物理碰撞。因?yàn)榕鲎财髟谟螒蛑惺遣豢梢?jiàn)的,所以不要求它必須與對(duì)象的網(wǎng)格具有完全相同的形狀,事實(shí)上,粗略的近似通常更有效,因此用戶通常使用Unity內(nèi)置的簡(jiǎn)單的碰撞器進(jìn)行組合,形成復(fù)合碰撞器。通過(guò)仔細(xì)定位和尺寸調(diào)整,復(fù)合碰撞器通??梢院芎玫啬7挛矬w的形狀,同時(shí)維持較低的處理器開(kāi)銷。最簡(jiǎn)單的碰撞器是Unity內(nèi)置的原始碰撞器,它們可以分為兩大類:3D碰撞器和2D碰撞器。3D碰撞器包括BoxCollider、SphereCollider和CapsuleCollider。在2D碰撞器包括BoxCollider2D和CircleCollider2D。開(kāi)發(fā)者可以將任意數(shù)量的原始碰撞器添加到單個(gè)對(duì)象中以創(chuàng)建復(fù)合碰撞器。在創(chuàng)建復(fù)合碰撞器時(shí),應(yīng)只有一個(gè)Rigidbody組件放在層次結(jié)構(gòu)中的根對(duì)象上。下面為大家具體介紹這些碰撞器。(1)BoxCollider(方體碰撞器)該碰撞器是最基本的方體碰撞器,如右圖所示。8.1.2碰撞器要使一個(gè)物體具有該類型碰撞器,只需添加BoxCollider組件即可,如下圖所示。(2)CapsuleCollider(膠囊碰撞器)通常情況下,玩家角色的碰撞器就是膠囊碰撞器,該碰撞器由兩個(gè)被圓柱體連接起來(lái)的半球組成,形狀類似膠囊,如下圖所示。8.1.2碰撞器要使一個(gè)物體具有膠囊碰撞器,只需添加CapsuleCollider組件即可,如下圖所示。下面具體介紹CapsuleCollider組件包含的屬性信息,如表所示。屬性功能IsTrigger啟用后,該碰撞體用于觸發(fā)事件,并被物理引擎忽略Material參考物理材料,確定此碰撞器如何與其他人交互Center碰撞器在物體的局部空間中的位置Radius碰撞器局部寬度的半徑Height碰撞器的總高度Direction膠囊的軸在物體的局部空間中的縱向方向8.1.2碰撞器(3)SphereCollider(球體碰撞器)該碰撞器是最基本的球體碰撞器,如下左圖所示。要使一個(gè)物體具有球體碰撞器,只需添加SphereCollider組件即可,如下右圖所示。8.1.2碰撞器接下來(lái)具體介紹SphereCollider組件包含的屬性信息,如表所示。屬性功能IsTrigger啟用后,該碰撞體用于觸發(fā)事件,并被物理引擎忽略Material參考物理材料,確定此碰撞器如何與其他人交互Center碰撞器在物體的局部空間中的位置Radius碰撞器的大小(即半徑的大?。?)WheelCollider(車(chē)輪碰撞器)該碰撞器是一種用于接地車(chē)輛的特殊碰撞器,如右圖所示。8.1.2碰撞器車(chē)輪碰撞器具有內(nèi)置的碰撞檢測(cè)、車(chē)輪物理特性和基于滑動(dòng)的輪胎摩擦模型。它可以用于除車(chē)輪以外的物體,但它專為帶輪子的車(chē)輛而設(shè)計(jì)。這里需要注意的是,使用WheelCollider碰撞器的車(chē)輪狀物體,必須包含剛體組件。要使一個(gè)物體具有車(chē)輪碰撞器,只需添加WheelCollider組件即可,如下圖所示。8.1.2碰撞器下面具體介紹WheelCollider組件包含的屬性信息,如表所示。屬性功能Mass車(chē)輪的質(zhì)量Radius車(chē)輪的半徑WheelDampingRate應(yīng)用于車(chē)輪的阻尼值SuspensionDistance車(chē)輪懸架的最大延伸距離,在局部空間測(cè)量。懸架始終向下延伸ForceAppPointDistance此參數(shù)定義對(duì)車(chē)輪碰撞器施加力的點(diǎn)。Center物體局部空間中的車(chē)輪中心SuspensionSpring懸架試圖通過(guò)增加彈簧和阻尼力來(lái)到達(dá)目標(biāo)位置Spring彈力試圖達(dá)到目標(biāo)位置。較大的值使懸架更快地到達(dá)目標(biāo)位置Damper懸架速度阻力值,較大的值會(huì)使車(chē)輪移動(dòng)得更慢TargetPosition懸架沿懸架距離的休息距離。1映射到完全延伸的懸架,0映射到完全壓縮的懸架。默認(rèn)值為0.5,與常規(guī)汽車(chē)暫停的行為相匹配Forward/SidewaysFriction車(chē)輪向前和向側(cè)面運(yùn)動(dòng)時(shí)輪胎摩擦的特性。8.1.2碰撞器(5)TerrainCollider(地形碰撞器)該碰撞器實(shí)現(xiàn)了一個(gè)碰撞表面,其形狀與它所附著的地形對(duì)象相同,適用于地形對(duì)象的碰撞。默認(rèn)創(chuàng)建的地形對(duì)象就帶有TerrainCollider組件,如右圖所示。下面具體介紹TerrainCollider組件包含的屬性信息,如表所示。屬性功能Material參考物理材料,確定此碰撞器如何與其他人交互TerrainData地形數(shù)據(jù)EnableTreeColliders選擇的樹(shù)碰撞器將被啟用8.1.2碰撞器(6)MeshCollider(網(wǎng)格碰撞器)該碰撞器采用網(wǎng)格資源并基于該網(wǎng)格構(gòu)建,例如,基于圓柱形網(wǎng)格的碰撞器,如下圖所示。比起使用復(fù)雜網(wǎng)格的基元,它的碰撞檢測(cè)結(jié)果要準(zhǔn)確得多。標(biāo)記為凸面的網(wǎng)格碰撞器可以與其他網(wǎng)格碰撞器碰撞。8.1.2碰撞器要使一個(gè)物體具有該類型碰撞器,只需添加MeshCollider組件和設(shè)置MeshCollider組件的Mesh屬性即可,如右圖所示。下面具體介紹MeshCollider組件包含的屬性信息,如表所示。屬性功能IsTrigger啟用后,該碰撞體用于觸發(fā)事件,并被物理引擎忽略Material參考物理材料,確定此碰撞器如何與其他人交互Mesh引用用于碰撞的網(wǎng)格Convex勾選復(fù)選框以啟用Convex。如果啟用,則此網(wǎng)格對(duì)撞機(jī)會(huì)與其他網(wǎng)格對(duì)撞機(jī)發(fā)生碰撞。凸面網(wǎng)格碰撞器限制為255個(gè)三角形8.1.3關(guān)節(jié)關(guān)節(jié)(Joint),在生活中是指骨與骨之間連接的地方,起到的是間接連接骨與骨的作用;Unity中的關(guān)節(jié)的作用也一樣,不同的是Unity中關(guān)節(jié)連接的是兩個(gè)剛體對(duì)象,或者是一個(gè)剛體對(duì)象和空間中的一個(gè)固定點(diǎn)。用戶可以使用Joint組件將一個(gè)剛體對(duì)象附著到另一個(gè)剛體對(duì)象或空間中的一個(gè)固定點(diǎn)上。通常,用戶希望關(guān)節(jié)能夠有一些運(yùn)動(dòng)的自由度,因此Unity提供了不同的關(guān)節(jié)組件來(lái)強(qiáng)制執(zhí)行不同的限制。例如,鉸鏈關(guān)節(jié)允許圍繞特定點(diǎn)和軸旋轉(zhuǎn),彈簧關(guān)節(jié)使物體保持分開(kāi),但讓它們之間的距離有一定的伸縮度。下面為大家具體介紹這些關(guān)節(jié)1.角色關(guān)節(jié)角色關(guān)節(jié)(CharacterJoint)主要用于布娃娃效果,它是一個(gè)擴(kuò)展的球窩關(guān)節(jié),允許用戶限制每個(gè)軸上的運(yùn)動(dòng),如右圖所示。8.1.3關(guān)節(jié)要使一個(gè)物體具有角色關(guān)節(jié),只需添加CharacterJoint組件即可,如下圖所示。8.1.3關(guān)節(jié)下面具體介紹CharacterJoint組件包含的屬性信息,如表所示。屬性功能ConnectedBody可選關(guān)節(jié)所依賴的剛體。如果沒(méi)有設(shè)置,關(guān)節(jié)連接到世界Anchor定義關(guān)節(jié)中心的點(diǎn)。所有基于物理的模擬都將使用此點(diǎn)作為計(jì)算的中心Axis扭軸。用橙色小裝置錐體可視化AutoConfigureConnectedAnchor如果啟用此選項(xiàng),則將自動(dòng)計(jì)算ConnectedAnchor位置以匹配anchor屬性的全局位置。這是默認(rèn)行為。如果禁用此選項(xiàng),則可以手動(dòng)配置連接錨點(diǎn)的位置ConnectedAnchor手動(dòng)配置連接的錨位置SwingAxis擺動(dòng)軸。用綠色小裝置錐體可視化LowTwistLimit關(guān)節(jié)的下限HighTwistLimit關(guān)節(jié)的上限Swing1Limit限制圍繞定義的擺動(dòng)軸的一個(gè)元素的旋轉(zhuǎn)(使用Gizmo上的綠色軸可視化)Swing2Limit限制圍繞定義的擺動(dòng)軸的一個(gè)元素的移動(dòng)BreakForce需要施加此關(guān)節(jié)斷裂的力,如果通過(guò)大于該值的力推動(dòng)關(guān)節(jié)超出其約束,則關(guān)節(jié)將被永久“破壞”并被刪除BreakTorque需要施加此關(guān)節(jié)斷裂的扭矩,如果關(guān)節(jié)旋轉(zhuǎn)超出其約束條件的扭矩大于該值,則關(guān)節(jié)將永久“斷開(kāi)”并刪除EnableCollision具有關(guān)節(jié)的物體是否能夠與連接的物體碰撞(而不是僅僅相互穿過(guò))EnablePreprocessing如果禁用預(yù)處理,那么關(guān)節(jié)的某些“不可能”配置將保持更穩(wěn)定,而不是瘋狂地失控8.1.3關(guān)節(jié)2.可配置關(guān)節(jié)可配置關(guān)節(jié)(ConfigurableJoint)是可根據(jù)需要自由定制的關(guān)節(jié),該組件包含其他關(guān)節(jié)類型的所有功能,所以可以使用它創(chuàng)建從現(xiàn)有關(guān)節(jié)的改編版本到用戶自己設(shè)計(jì)的高度專業(yè)化關(guān)節(jié)的任何東西。要使一個(gè)物體具有可配置關(guān)節(jié),只需添加ConfigurableJoint組件即可,如右圖所示。8.1.3關(guān)節(jié)下面具體介紹ConfigurableJoint組件包含的屬性信息,如表所示屬性功能ConnectedBody可選關(guān)節(jié)所附的剛體。如果沒(méi)有設(shè)置,關(guān)節(jié)連接到世界Anchor定義關(guān)節(jié)中心的點(diǎn)。所有基于物理的模擬都將使用此點(diǎn)作為計(jì)算的中心Axis將根據(jù)物理模擬定義對(duì)象自然旋轉(zhuǎn)的局部軸AutoConfigureConnectedAnchor如果啟用此選項(xiàng),則將自動(dòng)計(jì)算ConnectedAnchor位置以匹配anchor屬性的全局位置。如果禁用此選項(xiàng),則可以手動(dòng)配置連接錨點(diǎn)的位置ConnectedAnchor手動(dòng)配置連接的錨位置SecondaryAxis軸和次軸一起定義關(guān)節(jié)的局部坐標(biāo)系。第三軸設(shè)定為與其他兩個(gè)軸正交X,Y,ZMotion根據(jù)下面描述的限制屬性,允許沿X,Y或Z軸移動(dòng),自由,完全鎖定或限制AngularX,Y,ZMotion根據(jù)下面描述的限制屬性,允許圍繞X,Y或Z軸旋轉(zhuǎn)為自由,完全鎖定或限制LinearLimitSpring彈簧力用于在物體越過(guò)極限位置時(shí)將物體拉回Spring彈力。如果此值設(shè)置為零,則限制將無(wú)法通過(guò);除零以外的值將使限制具有彈性Damper彈簧力的減小與關(guān)節(jié)運(yùn)動(dòng)的速度成比例。將值設(shè)置為大于零允許關(guān)節(jié)“抑制”振蕩,否則振蕩將無(wú)限期地進(jìn)行LinearLimit限制關(guān)節(jié)的線性運(yùn)動(dòng)(即距離而不是旋轉(zhuǎn)的運(yùn)動(dòng)),指定為距關(guān)節(jié)原點(diǎn)的距離Limit從原點(diǎn)到極限的世界單位距離Bounciness當(dāng)物體到達(dá)極限距離時(shí),彈力施加在物體上以將其推回ContactDistance將強(qiáng)制執(zhí)行限制的最小距離公差(在關(guān)節(jié)位置和限制之間)。高容差使得在物體快速移動(dòng)時(shí)不太可能違反限制。但是,這也需要通過(guò)物理模擬更頻繁地考慮限制,這將傾向于略微降低性能8.1.3關(guān)節(jié)AngularXLimitSpring彈簧扭矩用于在物體超過(guò)關(guān)節(jié)的極限角度時(shí)將物體旋轉(zhuǎn)回來(lái)Spring彈簧扭矩。如果此值設(shè)置為零,則限制將無(wú)法通過(guò);除零以外的值將使限制具有彈性Damper彈簧扭矩的減小與關(guān)節(jié)旋轉(zhuǎn)的速度成比例。將值設(shè)置為大于零允許關(guān)節(jié)“抑制”振蕩,否則振蕩將無(wú)限期地進(jìn)行LowAngularXLimit低角度X限制關(guān)節(jié)繞X軸旋轉(zhuǎn)的下限,指定為距關(guān)節(jié)原始旋轉(zhuǎn)的角度Limit極限角度Bounciness當(dāng)物體的旋轉(zhuǎn)達(dá)到極限角度時(shí)施加在物體上的反彈扭矩ContactDistance將強(qiáng)制執(zhí)行限制的最小角度公差(在關(guān)節(jié)角度和極限之間)。高容差使得在物體快速移動(dòng)時(shí)不太可能違反限制。然而,這也需要更頻繁地通過(guò)物理模擬來(lái)考慮限制,這將傾向于略微降低性能HighAngularXLimit這類似于上面描述的低角度X極限屬性,但它確定了關(guān)節(jié)旋轉(zhuǎn)的上角度極限而不是下限AngularYZLimitSpring這與上述AngularXLimitSpring類似,但適用于圍繞Y軸和Z軸的旋轉(zhuǎn)AngularYLimit類似于上面描述的角度X極限屬性但適用于Y軸并且將上角度和下角度限制視為相同。角度Z極限類似于上述角度X極限屬性但適用于Z軸并且將上角度限制和下角度限制視為相同AngularZLimit類似于上面描述的角度X極限屬性但適用于Z軸并且將上角度限制和下角度限制視為相同TargetPosition關(guān)節(jié)的驅(qū)動(dòng)力應(yīng)該移動(dòng)到的目標(biāo)位置TargetVelocity 在驅(qū)動(dòng)力下,關(guān)節(jié)應(yīng)移動(dòng)到目標(biāo)位置的所需速度XDrive使關(guān)節(jié)沿其局部X軸線性移動(dòng)的驅(qū)動(dòng)力Mode模式確定關(guān)節(jié)是否應(yīng)移動(dòng)到達(dá)指定位置,指定速度或兩者PositionSpring彈簧力將關(guān)節(jié)移向目標(biāo)位置。僅在驅(qū)動(dòng)模式設(shè)置為“位置”或“位置和速度”時(shí)使用PositionDamper彈簧力的減小與關(guān)節(jié)運(yùn)動(dòng)的速度成比例。將值設(shè)置為大于零允許關(guān)節(jié)“抑制”振蕩,否則振蕩將無(wú)限期地進(jìn)行。僅在驅(qū)動(dòng)模式設(shè)置為“位置”或“位置和速度”時(shí)使用8.1.3關(guān)節(jié)MaximumForce用于將關(guān)節(jié)加速到其目標(biāo)速度的力。僅在驅(qū)動(dòng)模式設(shè)置為速度或位置和速度時(shí)使用YDrive這類似于上面描述的X驅(qū)動(dòng)器,但適用于關(guān)節(jié)的Y軸ZDrive這類似于上述X驅(qū)動(dòng)器,但適用于關(guān)節(jié)的Z軸TargetRotation關(guān)節(jié)的旋轉(zhuǎn)驅(qū)動(dòng)應(yīng)朝向的方向,指定為四元數(shù)TargetAngularVelocity關(guān)節(jié)的旋轉(zhuǎn)驅(qū)動(dòng)應(yīng)該達(dá)到的角速度。這被指定為矢量,其長(zhǎng)度指定旋轉(zhuǎn)速度,其方向定義旋轉(zhuǎn)軸RotationDriveMode將驅(qū)動(dòng)力應(yīng)用于對(duì)象以將其旋轉(zhuǎn)到目標(biāo)方向的方式。如果模式設(shè)置為X和YZ,則扭矩將圍繞這些軸施加,如下所述的角度X/YZ驅(qū)動(dòng)器屬性所指定。如果使用Slerp模式,則SlerpDrive屬性將確定驅(qū)動(dòng)扭矩AngularXDrive這指定了關(guān)節(jié)如何通過(guò)驅(qū)動(dòng)扭矩圍繞其局部X軸旋轉(zhuǎn)。僅當(dāng)上述“旋轉(zhuǎn)驅(qū)動(dòng)模式”屬性設(shè)置為X和YZ時(shí)才使用它Mode模式確定關(guān)節(jié)是否應(yīng)移動(dòng)到達(dá)指定的角度位置,指定的角速度或兩者PositionSpring彈簧扭矩使關(guān)節(jié)朝向目標(biāo)位置旋轉(zhuǎn)。僅在驅(qū)動(dòng)模式設(shè)置為“位置”或“位置和速度”時(shí)使用PositionDamper彈簧扭矩的減小與關(guān)節(jié)運(yùn)動(dòng)的速度成比例。將值設(shè)置為大于零允許關(guān)節(jié)“抑制”振蕩,否則振蕩將無(wú)限期地進(jìn)行。僅在驅(qū)動(dòng)模式設(shè)置為“位置”或“位置和速度”時(shí)使用MaximumForce用于將關(guān)節(jié)加速到其目標(biāo)速度的扭矩。僅在驅(qū)動(dòng)模式設(shè)置為速度或位置和速度時(shí)使用AngularYZDrive這類似于上述的AngularXDrive,但適用于關(guān)節(jié)的Y軸和Z軸SlerpDrive這指定了如何通過(guò)圍繞所有局部軸的驅(qū)動(dòng)扭矩來(lái)旋轉(zhuǎn)關(guān)節(jié)。僅在上述“旋轉(zhuǎn)驅(qū)動(dòng)模式”屬性設(shè)置為“Slerp”時(shí)使用Mode模式確定關(guān)節(jié)是否應(yīng)移動(dòng)到達(dá)指定的角度位置,指定的角速度或兩者PositionSpring彈簧扭矩使關(guān)節(jié)朝向目標(biāo)位置旋轉(zhuǎn)。僅在驅(qū)動(dòng)模式設(shè)置為“位置”或“位置和速度”時(shí)使用PositionDamper彈簧扭矩的減小與關(guān)節(jié)運(yùn)動(dòng)的速度成比例。將值設(shè)置為大于零允許關(guān)節(jié)“抑制”振蕩,否則振蕩將無(wú)限期地進(jìn)行。僅在驅(qū)動(dòng)模式設(shè)置為“位置”或“位置和速度”時(shí)使用8.1.3關(guān)節(jié)MaximumForce用于將關(guān)節(jié)加速到其目標(biāo)速度的扭矩。僅在驅(qū)動(dòng)模式設(shè)置為速度或位置和速度時(shí)使用ProjectionMode這定義了當(dāng)關(guān)節(jié)意外地超出它們時(shí),關(guān)節(jié)將如何快速回到其約束(由于物理引擎無(wú)法協(xié)調(diào)模擬中當(dāng)前的力組合)。選項(xiàng)為“無(wú)”和“位置和旋轉(zhuǎn)”P(pán)rojectionDistance在物理引擎嘗試將其捕捉回可接受的位置之前,關(guān)節(jié)必須移動(dòng)超出其約束的距離ProjectionAngle在物理引擎嘗試將其捕捉回可接受的位置之前,關(guān)節(jié)必須旋轉(zhuǎn)超出其約束的角度ConfiguredinWorldSpace是否應(yīng)該在世界空間而不是對(duì)象的本地空間中計(jì)算由各種目標(biāo)和驅(qū)動(dòng)器屬性設(shè)置的值SwapBodies如果啟用,這將使關(guān)節(jié)表現(xiàn)得好像組件已連接到連接的剛體(即關(guān)節(jié)的另一端)BreakForce如果通過(guò)大于該值的力推動(dòng)關(guān)節(jié)超出其約束,則關(guān)節(jié)將被永久“破壞”并被刪除BreakTorque如果關(guān)節(jié)旋轉(zhuǎn)超出其約束條件的扭矩大于該值,則關(guān)節(jié)將永久“斷開(kāi)”并刪除EnableCollision具有關(guān)節(jié)的物體是否能夠與連接的物體碰撞(而不是僅僅相互穿過(guò))EnablePreprocessing如果禁用預(yù)處理,那么關(guān)節(jié)的某些“不可能”配置將保持更穩(wěn)定,而不是瘋狂地失控8.1.3關(guān)節(jié)3.固定關(guān)節(jié)固定關(guān)節(jié)(FixedJoint)限制對(duì)象的移動(dòng)依賴于另一個(gè)對(duì)象,主要傾向于兩物體距離固定不變。這有點(diǎn)類似于父級(jí)和子級(jí),但是通過(guò)物理而不是Transform層次結(jié)構(gòu)實(shí)現(xiàn)。它的適用情況是,用戶想要兩個(gè)對(duì)象彼此能輕易分開(kāi),或者在沒(méi)有父級(jí)的情況下關(guān)聯(lián)兩個(gè)對(duì)象的移動(dòng)。要使一個(gè)物體具有固定關(guān)節(jié),只需添加FixedJoint組件即可,如下圖所示。8.1.3關(guān)節(jié)3.固定關(guān)節(jié)固定關(guān)節(jié)(FixedJoint)限制對(duì)象的移動(dòng)依賴于另一個(gè)對(duì)象,主要傾向于兩物體距離固定不變。這有點(diǎn)類似于父級(jí)和子級(jí),但是通過(guò)物理而不是Transform層次結(jié)構(gòu)實(shí)現(xiàn)。它的適用情況是,用戶想要兩個(gè)對(duì)象彼此能輕易分開(kāi),或者在沒(méi)有父級(jí)的情況下關(guān)聯(lián)兩個(gè)對(duì)象的移動(dòng)。要使一個(gè)物體具有固定關(guān)節(jié),只需添加FixedJoint組件即可,如右圖所示。下面具體介紹FixedJoint組件包含的屬性信息,如表所示。屬性功能ConnectedBody可選參考關(guān)節(jié)所依賴的剛體。如果沒(méi)有設(shè)置,關(guān)節(jié)連接到世界BreakForce需要施加此關(guān)節(jié)斷裂的力BreakTorque需要施加此關(guān)節(jié)斷裂的扭矩EnableCollision具有關(guān)節(jié)的物體是否能夠與連接的物體碰撞(而不是僅僅相互穿過(guò))EnablePreprocessing如果禁用預(yù)處理,那么關(guān)節(jié)的某些“不可能”配置將保持更穩(wěn)定,而不是瘋狂地失控8.1.3關(guān)節(jié)4.鉸鏈關(guān)節(jié)鉸鏈關(guān)節(jié)(HingeJoint)將兩個(gè)剛體組合在一起,使它們像通過(guò)鉸鏈連接著一樣移動(dòng)。鉸鏈關(guān)節(jié)適用于門(mén)、鏈條、鐘擺等。要使一個(gè)物體具有鉸鏈關(guān)節(jié),只需添加HingeJoint組件即可,如下圖所示。8.1.3關(guān)節(jié)下面具體介紹HingeJoint組件包含的屬性信息,如表所示。屬性功能ConnectedBody可選關(guān)節(jié)所附的剛體。如果沒(méi)有設(shè)置,關(guān)節(jié)連接到世界Anchor定義關(guān)節(jié)中心的點(diǎn)。所有基于物理的模擬都將使用此點(diǎn)作為計(jì)算的中心Axis身體擺動(dòng)的軸的方向。方向在本地空間中定義AutoConfigureConnectedAnchor如果啟用此選項(xiàng),則將自動(dòng)計(jì)算ConnectedAnchor位置以匹配anchor屬性的全局位置,這是默認(rèn)行為。如果禁用此選項(xiàng),則可以手動(dòng)配置連接錨點(diǎn)的位置ConnectedAnchor手動(dòng)配置連接的錨位置UseSpring與連接體相比,彈簧使剛體達(dá)到特定角度Spring啟用“使用Spring”時(shí)使用的Spring的屬性Spring對(duì)象聲稱移動(dòng)到該位置的力Damper該值越高,對(duì)象越慢TargetPosition彈簧的目標(biāo)角度。彈簧朝向以度為單位測(cè)量的角度拉動(dòng)UseMotor使用電機(jī)使物體旋轉(zhuǎn)Motor啟用“使用電機(jī)”時(shí)使用的電機(jī)屬性TargetVelocity對(duì)象試圖達(dá)到的速度Force施加的力是為了達(dá)到速度FreeSpin如果啟用,電機(jī)永遠(yuǎn)不會(huì)用于制動(dòng)旋轉(zhuǎn),只能加速UseLimits如果啟用,鉸鏈的角度將限制在最小值和最大值之內(nèi)LimitsMin最小旋轉(zhuǎn)可以達(dá)到的最小角度Max旋轉(zhuǎn)可以達(dá)到的最高角度Bounciness當(dāng)物體達(dá)到最小或最大停止限制時(shí),物體會(huì)反彈多少ContactDistance在距離極限觸點(diǎn)的接觸距離內(nèi)將持續(xù)存在以避免抖動(dòng)BreakForce需要施加此關(guān)節(jié)斷裂的力BreakTorque需要施加此關(guān)節(jié)斷裂的扭矩EnableCollision具有關(guān)節(jié)的物體是否能夠與連接的物體碰撞(而不是僅僅相互穿過(guò))EnablePreprocessing如果禁用預(yù)處理,那么關(guān)節(jié)的某些“不可能”配置將保持更穩(wěn)定,而不是瘋狂地失控8.1.3關(guān)節(jié)5.彈簧關(guān)節(jié)彈簧關(guān)節(jié)(SpringJoint)將兩個(gè)剛體連接在一起,并在限定范圍內(nèi)允許它們之間的距離做彈性改變,就像它們通過(guò)彈簧連接一樣。要使一個(gè)物體具有彈簧關(guān)節(jié),只需添加SpringJoint組件即可,如下圖所示。8.1.3關(guān)節(jié)下面具體介紹SpringJoint組件包含的屬性信息,如表所示。屬性功能ConnectedBody可選關(guān)節(jié)所附的剛體。如果沒(méi)有設(shè)置,關(guān)節(jié)連接到世界Anchor定義關(guān)節(jié)中心的點(diǎn)。所有基于物理的模擬都將使用此點(diǎn)作為計(jì)算的中心AutoConfigureConnectedAnchorUnity是否自動(dòng)計(jì)算連接錨點(diǎn)的位置ConnectedAnchor連接對(duì)象的本地空間中連接關(guān)節(jié)的點(diǎn)Spring物體的彈力Damper物體受力后彈力逐漸減少的量MinDistance物體之間最小距離下不受彈力作用MaxDistance物體之間最大距離下受彈力作用Tolerance更改容錯(cuò),允許彈簧具有不同的常規(guī)狀態(tài)下的長(zhǎng)度BreakForce需要施加此關(guān)節(jié)斷裂的力BreakTorque需要施加此關(guān)節(jié)斷裂的扭矩EnableCollision具有關(guān)節(jié)的物體是否能夠與連接的物體碰撞(而不是僅僅相互穿過(guò))8.1.4布料系統(tǒng)布料系統(tǒng)(Cloth)組件與SkinnedMeshRenderer(蒙皮的網(wǎng)格渲染器)組件一起使用,為模擬結(jié)構(gòu)提供基于物理的解決方案。它專為角色服裝設(shè)計(jì),僅適用于蒙皮網(wǎng)格。如果將Cloth組件添加到未蒙皮的網(wǎng)格,Unity將刪除未蒙皮的網(wǎng)格并添加蒙皮網(wǎng)格。Cloth組件只能和SkinnedMeshRenderer搭配使用,但是這不代表創(chuàng)建簡(jiǎn)單的物體時(shí)還必須在3DMax中導(dǎo)出一個(gè)帶有蒙皮信息的.fbx文件。用戶可以新建一個(gè)GameObject然后賦予它Cloth組件SkinnedMeshRenderer組件會(huì)自動(dòng)添加,然后就可以在SkinnedMeshRenderer組件中的Mesh上賦予模型體網(wǎng)格并設(shè)置正確的材質(zhì)。要將Cloth組件附加到蒙皮網(wǎng)格,在編輯器中選擇GameObject,單擊Inspector視圖中的“AddComponent”按鈕,然后選擇“physical→Cloth”,該組件出現(xiàn)在Inspector視圖中,如右圖所示。8.1.4布料系統(tǒng)下面具體介紹Cloth組件包含的屬性信息,如表所示。屬性功能StretchingStiffness布料的拉伸剛度BendingStiffness布料的彎曲剛度UseTethers應(yīng)用約束有助于防止移動(dòng)的布料顆粒離固定的布料顆粒太遠(yuǎn)。這有助于創(chuàng)建合理的彈性UseGravity是否對(duì)布料施加重力Damping運(yùn)動(dòng)阻尼系數(shù)ExternalAcceleration施加在布料上的恒定外部加速度RandomAcceleration隨機(jī)的施加在布料上的隨機(jī)外部加速度WorldVelocityScale角色在世界空間中移動(dòng)將影響布料頂點(diǎn)變化WorldAccelerationScale角色在世界空間移動(dòng)加速將影響布料頂點(diǎn)變化Friction布料與角色碰撞時(shí)的摩擦力CollisionMassScale增加碰撞粒子質(zhì)量的值UseContinuousCollision啟用連續(xù)碰撞以提高碰撞穩(wěn)定性UseVirtualParticles每個(gè)三角形添加一個(gè)虛擬粒子以提高碰撞穩(wěn)定性SolverFrequency每秒求解器迭代次數(shù)SleepThreshold布料活動(dòng)間隙的閾值CapsuleColliders可獲取與Cloth實(shí)例碰撞的CapsuleColliders數(shù)組SphereColliders可獲取與Cloth實(shí)例碰撞的ClothSphereColliderPairs數(shù)組8.1.4布料系統(tǒng)布料不會(huì)對(duì)場(chǎng)景中的所有碰撞器做出反應(yīng),也不會(huì)將力反射回世界。添加Cloth組件不會(huì)對(duì)任何其他物體造成影響。因此,在用戶手動(dòng)將來(lái)自世界的碰撞器添加到Cloth組件之前,Cloth組件和世界不會(huì)識(shí)別或關(guān)聯(lián)到對(duì)方。布料系統(tǒng)的物理模擬是單向的,也就是說(shuō),布料可以接受外部影響,但完全不會(huì)將影響賦予外部剛體。此外還有一點(diǎn)需要注意,用戶只能使用3種類型的布料碰撞器:球體、膠囊和錐形膠囊碰撞器。8.1.5恒力恒力(ContantForce)組件用于向剛體添加恒定力。比如用戶不希望某個(gè)物體有較大的初速度,而是希望它慢慢加速,就需要給該物體添加恒定力。給一個(gè)物體添加恒定力,只需要給該物體添加ConstantForce組件即可,如右圖所示。下面具體介紹ConstantForce組件包含的屬性信息,如表所示。屬性功能Force要在世界空間中應(yīng)用的力量的矢量RelativeForce要在對(duì)象的局部空間中應(yīng)用的力的向量Torque扭矩的矢量,應(yīng)用于世界空間。對(duì)象將開(kāi)始圍繞此向量旋轉(zhuǎn)。矢量越長(zhǎng),旋轉(zhuǎn)越快RelativeTorque扭矩矢量,應(yīng)用于局部空間。對(duì)象將開(kāi)始圍繞此向量旋轉(zhuǎn)。矢量越長(zhǎng),旋轉(zhuǎn)越快8.1.6物理材質(zhì)物理材質(zhì)(PhysicalMaterial)用于調(diào)整碰撞物體的摩擦力和彈跳效果。創(chuàng)建一個(gè)物理材質(zhì),從菜單欄中選擇“Assets→Create→PhysicMaterial”選項(xiàng)即可。給一個(gè)物體添加物理材質(zhì),該物體必須包含ollider組件,將新建的PhysicalMaterial從Project視圖拖動(dòng)到場(chǎng)景中帶有Collider組件的物體上,完成物理材質(zhì)的添加。用戶可在Inspector視圖調(diào)節(jié)物理材質(zhì)的屬性信息,如下圖所示。8.1.6物理材質(zhì)下面具體介紹物理材質(zhì)包含的屬性信息,如表所示。屬性功能DynamicFriction物體已經(jīng)移動(dòng)時(shí)使用的摩擦力。通常是從0到1的值。值為0感覺(jué)像冰一樣,值為1會(huì)使它非常快地停下來(lái),除非有大量的力或重力推動(dòng)物體StaticFriction當(dāng)物體靜止在表面上時(shí)使用的摩擦力。通常是0到1之間的值。值為0感覺(jué)像冰一樣,值為1會(huì)使移動(dòng)對(duì)象變得非常困難Bounciness表面彈性程度,值為0不會(huì)反彈。值為1將在沒(méi)有任何能量損失的情況下反彈FrictionCombine如何組合兩個(gè)碰撞物體的摩擦力-Average使用兩個(gè)摩擦值的平均值-Minimum使用兩個(gè)值中較小的一個(gè)-Maximum使用這兩個(gè)值中較大的一個(gè)-Multiply使用兩個(gè)摩擦值的乘積BounceCombine如何組合兩個(gè)碰撞物體的彈性。它具有與摩擦組合模式相同的模式8.1.7角色控制器角色控制器(CharacterController)主要用于不使用剛體物理特性的第三人稱或第一人稱控制器(可以理解成玩家)。第一人稱或第三人稱游戲中的角色通常需要具備一些基于碰撞的物理性質(zhì),這樣它就不會(huì)掉到地板上或穿過(guò)墻壁。但是,通常情況下,角色的加速度和移動(dòng)在物理上并不真實(shí),它可以在不受動(dòng)量影響的情況下瞬間加速、制動(dòng)或改變方向。在3D游戲中,可以使用角色控制器創(chuàng)建此類行為。角色控制器的主要組件就是CharacterController組件,如下圖所示。8.1.7角色控制器該組件為角色提供了一個(gè)簡(jiǎn)單的膠囊碰撞器,它始終是直立的??刂破饔凶约旱奶厥夤δ軄?lái)設(shè)置物體的速度和方向,但與真正的碰撞器不同,這里不需要?jiǎng)傮w,動(dòng)量效果也不實(shí)際。角色控制器無(wú)法穿過(guò)場(chǎng)景中的靜態(tài)碰撞器,因此將被地板承托并被墻壁阻擋。它可以在移動(dòng)時(shí)將剛體對(duì)象推到一邊但不會(huì)因碰撞加速。這意味著用戶可以使用標(biāo)準(zhǔn)3D碰撞器來(lái)創(chuàng)建控制器活動(dòng)的場(chǎng)景,但角色本身不受真實(shí)物理行為的限制。下面具體介紹CharacterController組件包含的屬性信息,如表所示。屬性功能SlopeLimit將碰撞器限制為僅爬升比指示值更緩(以度為單位)的斜坡StepOffset只有當(dāng)階梯面比指示值更接近地面時(shí),角色才會(huì)爬上樓梯。臺(tái)階高度不應(yīng)該大于CharacterController的高度,否則會(huì)產(chǎn)生錯(cuò)誤Skinwidth兩個(gè)碰撞器可以在它們的皮膚寬度上穿透彼此。較大的皮膚寬度可減少抖動(dòng)。皮膚寬度過(guò)小可能導(dǎo)致角色卡住。建議將此值設(shè)為Radius的10%MinMoveDistance如果角色試圖移動(dòng)的距離小于指示值,則角色根本不會(huì)移動(dòng)。這可以用來(lái)減少抖動(dòng)。在大多數(shù)情況下,此值應(yīng)保留為0Center這將抵消世界空間中的膠囊碰撞器,并且不會(huì)影響角色的扭轉(zhuǎn)方式Radius膠囊碰撞器半徑的長(zhǎng)度。Height角色的膠囊碰撞器高度。更改此設(shè)置將沿Y軸縮放碰撞器8.1.7角色控制器學(xué)習(xí)了CharacterController組件屬性信息的含義,用戶可以自定義設(shè)置角色的大小、高度等參數(shù),如下圖所示。8.2物理射線的用法射線是在三維世界中從一個(gè)點(diǎn)沿一個(gè)方向發(fā)射的一條無(wú)限長(zhǎng)的線。射線在其軌跡上一旦與添加了碰撞器的模型發(fā)生碰撞,將停止發(fā)射。在Unity游戲開(kāi)發(fā)中,可以利用射線實(shí)現(xiàn)子彈擊中目標(biāo)的檢測(cè)、鼠標(biāo)點(diǎn)擊拾取物體等功能。在Unity開(kāi)發(fā)中,要想通過(guò)射線檢測(cè)觸發(fā)事件實(shí)現(xiàn)某個(gè)功能,主要用到的工具類有Physic、RaycastHit(光線投射碰撞)和Ray(射線),這些類中有好幾種射線檢測(cè)方法,接下來(lái)給大家具體介紹。1.Physics.RayRay射線類用于創(chuàng)建射線實(shí)例對(duì)象,其語(yǔ)法示例如下。返回目錄Ray射線類實(shí)例化射線對(duì)象,其構(gòu)造方法有2個(gè)參數(shù):Vector3origin、Vector3direction,它們分別表示射線的起點(diǎn)位置和射線的發(fā)射方向。這里需要注意的是,射線的方向在設(shè)置時(shí)如果未單位化,Unity會(huì)自動(dòng)對(duì)其進(jìn)行歸一化處理。8.2物理射線的用法2.Physics.RaycastRaycast是一個(gè)靜態(tài)的返回值為bool類型的方法,其語(yǔ)法格式及參數(shù)如下。在上面的靜態(tài)方法中,括號(hào)里的主要參數(shù)有3個(gè):origin(射線的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論