當前位置: 首頁 > 資訊動態(tài) > 企業(yè)動態(tài)
Unity ID允許您購買和/或訂閱Unity產(chǎn)品和服務,在Asset Store中購物并參與Unity社區(qū)。
Unity物理引擎可以讓物體受到近似于自然界中各種力(例如重力、速度、加速度和摩擦力)的作用。 它允許具有不同物理屬性的各種對象與場景中的其他對象進行動態(tài)交互。
物理引擎可通過(近似于)現(xiàn)實世界中存在的作用力(例如重力、速度和加速度)來控制物體。
當游戲對象相互碰撞或相交時,碰撞體會幫助Unity記錄這一過程。 游戲對象必須有附加的RigidBody(剛體)組件才能發(fā)生碰撞。 碰撞體的類型包括:Box Collider(盒碰撞體)、Capsule Collider(膠囊碰撞體)、Mesh Collider(網(wǎng)格碰撞體)、Sphere Collider(球形碰撞體)、Terrain Collider(地形碰撞器)和Wheel Collider(車輪碰撞體)(圖01)。 請注意,Mesh Collider需要占用更多的計算資源,計算成本較高。 如果顯示的網(wǎng)格非常細密,最好使用“計算成本較低”的網(wǎng)格進行碰撞。 借助ProBuilder,可以構建更簡單的“代理”網(wǎng)格以滿足復雜網(wǎng)格的形狀要求。
“GameObject”下拉菜單中的許多Unity 3D對象都包含碰撞體。 要為獨立或空的游戲對象啟用Unity物理引擎,請在檢查器窗口中選擇“Add Component”按鈕,選擇“Physics”,然后指定碰撞體的類型。 這里,我們選擇的是“Box Collider”
可以通過選中相應的復選框來啟用觸發(fā)器。觸發(fā)器的功能與碰撞體相同,但會禁用組件上的物理引擎,從而使對象能夠經(jīng)某個區(qū)域穿過它。當對象進入或離開觸發(fā)器時,可以調(diào)用事件
其中一個對象必須附加Rigidbody組件。最佳做法是,在觸發(fā)器內(nèi)移動的對象具有此組件。
Rigidbody組件(圖04)可以讓游戲對象受到物理屬性(例如重力)的影響。這其中還包括質(zhì)量、速度和阻力(空氣阻力)等屬性。 質(zhì)量較大的對象受質(zhì)量較小的對象的影響較小,反之亦然。阻力會影響速度隨時間的衰減。角阻力會影響角速度。
“Is Kinematic”復選框允許剛體通過Unity物理引擎影響其他對象,但自身卻不會受到影響。例如,VR游戲中的“Hand Avatar”可以通過物理引擎與對象相互作用,但我們并不希望物理引擎作用到手上。 “Is Kinematic”復選框還將影響由動畫引擎控制的對象。如果選中“Is Kinematic”復選框(開啟),動畫引擎便會影響相關對象。 如果取消選中(關閉),那么起控制作用的就是物理引擎。 Interpolation:碰撞檢測方式 Interpolate:對象的平滑移動基于動畫時間軸中前一幀的信息。 Extrapolate:對象的平滑運動基于對下一幀的猜測。 Collision Detection:碰撞檢測速率 Discrete:默認設置 Continuous:檢測與靜態(tài)對象交互的快速運動對象 Continuous Dynamic:檢測與其他快速運動對象交互的快速運動對象 Continuous Speculative:預測碰撞檢測 Constraints:定義哪些軸的對象不應移動 此外,我們可以通過在下拉菜單中進行選擇來重新定義和更改Unity物理引擎值的元素:“Edit”“Project Settings”“Physics”
與其他游戲對象交互時,可用于碰撞體的函數(shù)包括: OnCollisionEnter (Collision) 在記錄碰撞時調(diào)用。 例如:areTag(Enemy) { //Hit the enemy } }
OnCollisionStay (Collision) 在碰撞期間調(diào)用 OnCollisionExit (Collision) 在碰撞停止時調(diào)用 為了啟用或禁用重力,可以使用useGravity函數(shù)。Gravity 為了向特定方向添加作用力,可以使用.AddForce()函數(shù)。 *rigidBody.AddForce(Vector3) 為了添加繞軸的旋轉力,可以使用.AddTorque()函數(shù)。 rigidBody.AddTorque(Vector3, Force Mode) 請注意,在FixedUpdate()中調(diào)用AddForce和AddTorque時,將會隨時間推移施加此作用力。
#作用力方式 Acceleration:施加以恒定速率增加的作用力 Force:默認設置,即在考慮質(zhì)量因素的情況下逐漸施加作用力。 Impulse:施加瞬時作用力,而不是逐漸增加的作用力。 VelocityChange:沿不同方向施加瞬時作用力。忽略質(zhì)量因素。
#關于更新 Update: 每幀調(diào)用一次。 FixedUpdate: 每幀調(diào)用多次。 FixedUpdate期間會調(diào)用大多數(shù)物理計算。顧名思義,計算之間的時間是固定的。
控制表面的摩擦力與其他表面相互作用的方式。 物理碰撞體可以應用自定義材質(zhì)。 您可以指定以下值:Dynamic Friction (動態(tài)摩擦力)、Static Friction(靜態(tài)摩擦力)和Bounciness(彈力)。您也可以自定義以下參數(shù):Friction Combine(摩擦力合并)和Bounce Combine(合并反彈)。 要創(chuàng)建自定義物理材質(zhì),請從“Top Menu”下拉菜單中選擇:“Assets”“Create”“Physic Material”(圖06),然后在“Project”窗口中選擇新創(chuàng)建的物理材質(zhì)并將其拖到Inspector中游戲對象的“Material”屬性上,從而將其添加至游戲對象。
Joint(關節(jié))組件用于將一個剛體連接到另一個剛體或空間中的固定點。關節(jié) 施加使剛體移動的作用力。通過關節(jié)限制也可以限制某些運動。 物理關節(jié)的類型包括:Character Joint(角色關節(jié))、Configurable Joint(可配置關節(jié))、Fixed Joint(固定關節(jié))、Hinge Joint(鉸鏈關節(jié))和Spring Joint(彈簧關節(jié))
Character Joint:模擬角色的關節(jié),例如髖關節(jié)或肩關節(jié)。 此選項限制剛體的所有線性自由運動,可實現(xiàn)全角度自由運動。附著在Character Joint上的剛體可從共用原點圍繞每個軸和樞軸旋轉。 Configurable Joint:模擬任何骨骼關節(jié),例如布娃娃中的關節(jié)。您可以對此關節(jié)進行配置,從而強制和限制剛體以某個自由度移動。 Fixed Joint:限制剛體的運動,使其跟隨所附著的剛體進行移動。當您需要一種能輕松分離的剛體,或者您想關聯(lián)兩個剛體的運動而無需在“Transform”層次結構中建立父級關系時,即可使用這種關節(jié)。 Hinge Joint:在共用原點上將一個剛體附加到另一個剛體或空間點上,并允許剛體從該原點圍繞特定的軸旋轉??捎糜谀M門和手指關節(jié)。 Spring Joint:保持剛體彼此分開,但剛體之間的距離可略微伸展。彈簧就像一塊彈性體,它會嘗試聚攏兩個錨定點并維持原來的位置。
在一個物理對象與另一個物理對象之間投射光線或建立隱形連接。 Physics.Raycast (Vector3 Origin, Vector3 Direction) Physics.Raycast (Vector3 Origin, Vector3 Direction, RaycastHit Info, float Distance, int Layermask) 或 Physics.Raycast (Ray RayName, RaycastHit Info, float Distance, int Layermask)
##參數(shù): origin: 光線在“世界”空間中的起點。 direction: 光線在“物體”空間中的投射方向。 maxDistance: 光線用于檢查碰撞時的最大距離。 layerMask: 一種用于在投射光線時有選擇地忽略碰撞體的圖層蒙版。 queryTriggerInteraction:指定此查詢是否應命中觸發(fā)器。 可以為發(fā)生碰撞的游戲對象分配一個新標簽或已有標簽,這樣會更易于識別RaycastHit
在本例中,Raycast將從附加該腳本的任何游戲對象的原點向下投射光線。 如果“Transform”位置與地面(帶有環(huán)境標簽的游戲對象)之間的距離為“DeploymentHeight”,則調(diào)用以下函數(shù):DeployParachute()。 使用Raycast時,最佳做法是: 減少場景中Raycast的數(shù)量。 不要在FixedUpdate()或Update()函數(shù)內(nèi)部調(diào)用Raycast。 應避免使用MeshColliders。
#圖層和碰撞矩陣 將默認行為分配給游戲對象的默認圖層時,它會與所有對象發(fā)生碰撞。這樣會造成效率低下。 因此,可以將游戲對象分配到一個新的圖層。這些圖層之間的碰撞關系可以由碰撞矩陣來確定。 要打開物理引擎設置,請從“Top Menu”下拉菜單中選擇: “Edit”“Project Settings”“Physics”。 “Project Settings”窗口的底部就是圖層碰撞矩陣
#優(yōu)化注意事項 最好明確定義哪些對象與其他對象發(fā)生碰撞,從而減少計算次數(shù)和腳本編寫。 此外,建議不要將某些物理屬性應用于靜態(tài)對象。 例如,不要在靜態(tài)對象上使用“Transform”, 否則會令性能變差。
Unity 2021之后WebGL PlayerPrefs限制存儲內(nèi)容只能在1M以內(nèi)