Unity Rigidbody組件深度解析:從核心屬性到性能優(yōu)化的完整指南
1. 項(xiàng)目概述為什么Rigidbody是Unity物理世界的基石在Unity里做游戲尤其是涉及到任何有“物理感”的交互比如一個(gè)箱子被推倒、一個(gè)角色從高處跳下、一顆子彈擊中目標(biāo)你繞不開(kāi)的一個(gè)組件就是Rigidbody。很多新手朋友可能覺(jué)得這不就是個(gè)讓物體掉下來(lái)的組件嗎給模型掛上它就能受重力了。這話(huà)對(duì)但只說(shuō)對(duì)了一小半。Rigidbody遠(yuǎn)不止是“重力開(kāi)關(guān)”它是Unity物理引擎PhysX與你的游戲?qū)ο筮M(jìn)行溝通的核心代理和數(shù)據(jù)容器。你可以把它想象成一個(gè)物體的“物理身份證”。沒(méi)有這張身份證物體在物理世界里就是個(gè)“幽靈”——它看得見(jiàn)但摸不著物理引擎完全無(wú)視它。一旦掛上Rigidbody這個(gè)物體就正式在物理世界“注冊(cè)”了擁有了質(zhì)量、速度、阻力、角速度等一系列物理屬性物理引擎才會(huì)開(kāi)始計(jì)算它如何運(yùn)動(dòng)、如何與其他物理物體碰撞。我見(jiàn)過(guò)太多項(xiàng)目卡頓、穿模、物理表現(xiàn)詭異追根溯源問(wèn)題往往出在對(duì)Rigidbody屬性的誤解或?yàn)E用上。比如一個(gè)本該靜止的巨型地形因?yàn)檎`加了Rigidbody且沒(méi)設(shè)置為Kinematic導(dǎo)致整個(gè)場(chǎng)景物理開(kāi)銷(xiāo)巨大或者一個(gè)需要精準(zhǔn)控制的角色因?yàn)镈rag阻力和Angular Drag角阻力設(shè)置不當(dāng)感覺(jué)像在冰面或糖漿里移動(dòng)。這個(gè)組件上手簡(jiǎn)單但想用得“恰到好處”需要對(duì)其每一個(gè)屬性都有透徹的理解。所以這篇指南的目的就是帶你像庖丁解牛一樣把Rigidbody的每一個(gè)屬性掰開(kāi)揉碎不僅告訴你它是什么更重點(diǎn)解釋為什么要這么設(shè)置以及在實(shí)際項(xiàng)目中怎么用才能避免踩坑。無(wú)論你是剛接觸Unity的開(kāi)發(fā)者還是想優(yōu)化物理性能的老手相信都能從中找到你需要的東西。2. Rigidbody核心屬性深度解析Rigidbody的屬性面板看起來(lái)?xiàng)l目不少但我們可以把它們分為幾個(gè)邏輯組質(zhì)量與質(zhì)心、運(yùn)動(dòng)控制、約束、碰撞檢測(cè)與休眠。理解這些分組能幫你更快地定位和調(diào)整問(wèn)題。2.1 質(zhì)量、質(zhì)心與慣性張量物體的物理“內(nèi)在”Mass質(zhì)量這是最直觀的屬性單位是千克kg。它的值直接影響物體的“重量感”。但這里有個(gè)巨大的誤區(qū)Mass的絕對(duì)值并不直接對(duì)應(yīng)現(xiàn)實(shí)世界的重量。在Unity的物理模擬中它更多是一個(gè)相對(duì)值。核心原則物理模擬的穩(wěn)定性和速度依賴(lài)于物體之間質(zhì)量的合理比例。通常建議將場(chǎng)景中主要運(yùn)動(dòng)物體的質(zhì)量保持在0.1到10之間并以此為基礎(chǔ)按比例設(shè)置其他物體。比如你的主角質(zhì)量為1那么一個(gè)小箱子可以設(shè)為0.5一個(gè)足球設(shè)為0.3而一堵巨大的墻如果它需要被物理推動(dòng)比如被爆炸炸飛可以設(shè)為50。但如果這堵墻是靜態(tài)背景更好的做法是不加Rigidbody或者使用Static碰撞體。為什么不能隨意設(shè)置成幾百上千因?yàn)檫^(guò)大的質(zhì)量差比如1和1000在高速碰撞時(shí)極易導(dǎo)致數(shù)值計(jì)算不穩(wěn)定引發(fā)“抖動(dòng)”或“穿透”現(xiàn)象。PhysX引擎在處理極端質(zhì)量比時(shí)精度會(huì)下降。Center of Mass質(zhì)心和 Inertia Tensor慣性張量這兩個(gè)屬性默認(rèn)是自動(dòng)計(jì)算的質(zhì)心基于碰撞體的形狀慣性張量則基于碰撞體形狀和質(zhì)量分布。在99%的情況下你不需要手動(dòng)修改它們。但有兩種情況需要介入特殊造型物體比如一個(gè)形狀不規(guī)則、質(zhì)量分布極度不均勻的物體想象一個(gè)錘子其視覺(jué)重心和物理質(zhì)心可能不重合。這會(huì)導(dǎo)致它在受力旋轉(zhuǎn)時(shí)繞著一個(gè)奇怪的點(diǎn)轉(zhuǎn)動(dòng)看起來(lái)不真實(shí)。這時(shí)你可以通過(guò)腳本修改Rigidbody.centerOfMass來(lái)手動(dòng)指定質(zhì)心。性能優(yōu)化對(duì)于非常復(fù)雜的網(wǎng)格碰撞體自動(dòng)計(jì)算慣性張量開(kāi)銷(xiāo)較大。如果你明確知道該物體的轉(zhuǎn)動(dòng)慣性比如它就是一個(gè)球體或者你根本不在乎它的旋轉(zhuǎn)可以通過(guò)Rigidbody.inertiaTensor設(shè)置一個(gè)簡(jiǎn)化值如Vector3.one能輕微提升性能。2.2 運(yùn)動(dòng)控制阻力、重力與物理材質(zhì)Drag阻力與 Angular Drag角阻力這兩個(gè)是控制物體運(yùn)動(dòng)“手感”的關(guān)鍵。Drag影響直線運(yùn)動(dòng)的速度衰減Angular Drag影響旋轉(zhuǎn)速度的衰減。Drag0物體在真空中運(yùn)動(dòng)一旦獲得速度除非碰撞否則永不停止。適合太空射擊游戲中的子彈。Drag1物體在空氣中運(yùn)動(dòng)速度會(huì)較快衰減。這是很多地面角色移動(dòng)的常用范圍0.5~2。Drag10或更高物體像是在水或糖漿中運(yùn)動(dòng)速度衰減極快??梢杂脕?lái)模擬水下移動(dòng)或制造一種“厚重”感。一個(gè)常見(jiàn)的技巧是用較小的Drag配合腳本來(lái)實(shí)現(xiàn)更可控的運(yùn)動(dòng)。例如角色移動(dòng)時(shí)通過(guò)AddForce施加力同時(shí)設(shè)置一個(gè)適中的Drag如1這樣在停止輸入時(shí)角色會(huì)自然滑行一小段距離停下比瞬間停止更自然。如果希望瞬間停止可以在代碼中直接將速度velocity設(shè)為Vector3.zero。Use Gravity使用重力勾選后物體會(huì)受到場(chǎng)景重力Physics.gravity默認(rèn)是(0, -9.81, 0)的影響。關(guān)閉它物體將無(wú)視重力適合用于飛機(jī)、太空飛船或需要懸浮的物體。一個(gè)高級(jí)技巧你可以動(dòng)態(tài)開(kāi)關(guān)此選項(xiàng)。例如實(shí)現(xiàn)一個(gè)“跳躍板”效果當(dāng)玩家踩上去時(shí)關(guān)閉跳躍板的Use Gravity并給它一個(gè)向上的力讓它懸浮一段時(shí)間后再開(kāi)啟重力落下。Is Kinematic是否為運(yùn)動(dòng)學(xué)物體這是最容易用錯(cuò)也最重要的屬性之一。勾選后該物體不受物理力的影響重力、碰撞力、AddForce等但你可以通過(guò)直接修改它的Transform位置position/rotation來(lái)移動(dòng)它。什么時(shí)候用移動(dòng)平臺(tái)、電梯你需要它們沿固定路徑精確移動(dòng)不受玩家碰撞影響而偏離軌道。玩家或敵人角色在某些架構(gòu)下使用CharacterController或自己編寫(xiě)移動(dòng)邏輯時(shí)通常會(huì)將Rigidbody設(shè)為Kinematic避免物理引擎干擾你的自定義移動(dòng)同時(shí)又能檢測(cè)碰撞。由動(dòng)畫(huà)驅(qū)動(dòng)的物體如果一個(gè)物體的運(yùn)動(dòng)完全由動(dòng)畫(huà)系統(tǒng)控制將其設(shè)為Kinematic可以避免物理和動(dòng)畫(huà)之間的沖突。重要區(qū)別Kinematic物體會(huì)影響其他非Kinematic的物理物體。當(dāng)它撞上一個(gè)普通Rigidbody時(shí)會(huì)把后者撞飛。但它自己巋然不動(dòng)。Interpolate插值與 Collision Detection碰撞檢測(cè)這兩個(gè)屬性共同決定了物體運(yùn)動(dòng)的平滑度和碰撞檢測(cè)的精度。Interpolate用于平滑因固定物理幀率默認(rèn)為50Hz更新導(dǎo)致的渲染幀之間的運(yùn)動(dòng)跳躍。None不插值。在物理幀之間物體可能“瞬移”高速移動(dòng)時(shí)尤其明顯。Interpolate基于上一物理幀的位置進(jìn)行插值。這是最常用的選項(xiàng)能讓運(yùn)動(dòng)看起來(lái)非常平滑尤其適合攝像機(jī)跟隨的玩家角色。Extrapolate預(yù)測(cè)下一物理幀的位置。這在物體勻速運(yùn)動(dòng)時(shí)效果很好但如果運(yùn)動(dòng)突然改變?nèi)缱矇赡軙?huì)產(chǎn)生短暫的“過(guò)沖”現(xiàn)象。一般較少使用。Collision Detection決定了如何檢測(cè)碰撞。Discrete離散默認(rèn)選項(xiàng)。只在每個(gè)物理幀檢測(cè)碰撞。對(duì)于低速移動(dòng)的物體完全夠用性能最好。Continuous連續(xù)對(duì)于高速移動(dòng)的物體如子彈使用離散檢測(cè)可能會(huì)直接穿透薄碰撞體。連續(xù)檢測(cè)能防止這種情況但性能開(kāi)銷(xiāo)大。Continuous Dynamic連續(xù)動(dòng)態(tài)這是最高級(jí)別的檢測(cè)用于高速物體與其他也設(shè)置為Continuous或Continuous Dynamic的物體之間的碰撞。開(kāi)銷(xiāo)最大。經(jīng)驗(yàn)之談99%的靜態(tài)或低速物體用Discrete。玩家角色或高速發(fā)射體用Continuous。只有當(dāng)你發(fā)現(xiàn)高速物體如子彈穿透了另一個(gè)也在高速移動(dòng)的物體如另一個(gè)子彈時(shí)才考慮對(duì)兩者都使用Continuous Dynamic。濫用連續(xù)檢測(cè)是導(dǎo)致物理性能下降的常見(jiàn)原因。3. 約束、休眠與物理材質(zhì)關(guān)聯(lián)3.1 Constraints約束凍結(jié)自由度約束允許你“凍結(jié)”物體在某個(gè)或某些軸上的移動(dòng)或旋轉(zhuǎn)。這是一個(gè)極其強(qiáng)大的功能可以簡(jiǎn)化很多物理模擬。Freeze Position凍結(jié)位置勾選X物體在世界X軸上就無(wú)法被物理力移動(dòng)。但注意你依然可以通過(guò)腳本直接修改Transform.position來(lái)移動(dòng)它。這常用于2D游戲凍結(jié)Z軸或者確保一個(gè)物體只沿軌道移動(dòng)如只允許Y軸移動(dòng)的升降梯。Freeze Rotation凍結(jié)旋轉(zhuǎn)勾選相應(yīng)軸物體就不會(huì)繞該軸旋轉(zhuǎn)。例如一個(gè)第一人稱(chēng)角色控制器你通常不希望玩家身體前后X軸或左右Z軸傾斜就可以?xún)鼋Y(jié)這兩個(gè)旋轉(zhuǎn)軸只保留繞Y軸的旋轉(zhuǎn)左右看。實(shí)戰(zhàn)應(yīng)用制作一個(gè)“不倒翁”。你可以?xún)鼋Y(jié)其X和Z軸的位置這樣它只會(huì)原地?fù)u晃繞X/Z軸旋轉(zhuǎn)而不會(huì)平移并且不凍結(jié)任何旋轉(zhuǎn)軸讓它自由搖擺。3.2 Sleeping休眠重要的性能優(yōu)化機(jī)制物理引擎的智能之處在于它會(huì)讓靜止或近乎靜止的物體進(jìn)入“休眠”狀態(tài)。休眠的物體在每一幀不再進(jìn)行完整的物理計(jì)算直到它被外力碰撞、力等喚醒。這能極大節(jié)省CPU資源。Rigidbody的Sleeping Mode屬性可以控制其休眠行為Never Sleep永不休眠。慎用只有對(duì)于需要持續(xù)監(jiān)控、每幀都可能受力的極少數(shù)關(guān)鍵物體如主角才考慮。Start Awake初始喚醒之后可休眠。默認(rèn)選項(xiàng)。Start Asleep初始即休眠直到被喚醒。你需要關(guān)心的是不要人為阻止合理的休眠。例如不要為了讓一個(gè)物體“更穩(wěn)定”而給它施加一個(gè)持續(xù)存在的、極其微小的力這會(huì)阻止它休眠。同時(shí)在代碼中如果你需要強(qiáng)制喚醒一個(gè)物體比如準(zhǔn)備發(fā)射它可以調(diào)用Rigidbody.WakeUp()。3.3 與Collider和物理材質(zhì)的協(xié)同工作Rigidbody必須與Collider碰撞體組件協(xié)同工作。Collider定義了物體的形狀如盒子、球體、網(wǎng)格而Rigidbody定義了物體的物理屬性。沒(méi)有碰撞體的Rigidbody就像沒(méi)有形狀的力場(chǎng)無(wú)法參與碰撞。更精細(xì)的控制需要通過(guò)物理材質(zhì)來(lái)實(shí)現(xiàn)。物理材質(zhì)Physics Material是一種資源可以附加到碰撞體上主要影響兩個(gè)物體接觸時(shí)的表面行為Dynamic Friction動(dòng)摩擦/Static Friction靜摩擦模擬表面粗糙度。值越高越難滑動(dòng)。Bounciness彈性模擬彈性。0為無(wú)彈性橡皮泥1為完全彈性超級(jí)彈力球。你可以在物理材質(zhì)中組合這些屬性。比如創(chuàng)建一個(gè)“冰面”材質(zhì)設(shè)置極低的摩擦力創(chuàng)建一個(gè)“橡膠球”材質(zhì)設(shè)置高彈性。然后將其拖拽到物體碰撞體的Material槽中。一個(gè)關(guān)鍵點(diǎn)兩個(gè)物體碰撞時(shí)的摩擦力和彈性是取各自物理材質(zhì)的平均值具體計(jì)算方式可查文檔。這意味著一個(gè)冰球低摩擦撞上水泥地高摩擦其綜合效果是中等摩擦。4. 通過(guò)腳本操控Rigidbody力、速度與直接移動(dòng)在腳本中操控Rigidbody是實(shí)現(xiàn)游戲邏輯的核心。主要有三種方式適用于不同場(chǎng)景。4.1 施加力模擬自然物理過(guò)程使用AddForce和AddTorque是最符合物理直覺(jué)的方式。力會(huì)改變物體的加速度進(jìn)而影響速度最終改變位置。這會(huì)產(chǎn)生非常自然、有慣性感的運(yùn)動(dòng)。// 向前方施加一個(gè)持續(xù)的力類(lèi)似火箭推進(jìn) void FixedUpdate() { if (Input.GetKey(KeyCode.W)) { rb.AddForce(transform.forward * thrustForce); } }為什么用FixedUpdate因?yàn)槲锢碛?jì)算是在固定的時(shí)間步長(zhǎng)Fixed Timestep默認(rèn)0.02秒中進(jìn)行的。在FixedUpdate中調(diào)用物理相關(guān)函數(shù)能確保力的施加與物理引擎更新同步避免因幀率波動(dòng)導(dǎo)致物理行為不一致。力的模式AddForce的第二個(gè)參數(shù)ForceMode非常重要。ForceMode.Force施加一個(gè)持續(xù)的力單位牛頓。這是最常用的符合力 質(zhì)量 * 加速度。ForceMode.Impulse施加一個(gè)瞬間的沖量單位牛頓秒。它會(huì)立即改變物體的速度忽略質(zhì)量。非常適合模擬爆炸、跳躍、射擊的后坐力。// 跳躍 if (Input.GetKeyDown(KeyCode.Space) isGrounded) { rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse); }ForceMode.Acceleration/VelocityChange這兩個(gè)模式忽略物體的質(zhì)量。Acceleration直接添加加速度VelocityChange直接添加速度變化。使用較少但在需要精確控制運(yùn)動(dòng)且不想受質(zhì)量影響時(shí)有用。4.2 直接修改速度實(shí)現(xiàn)精準(zhǔn)即時(shí)響應(yīng)有時(shí)你需要物體立即達(dá)到某個(gè)速度而不是通過(guò)力來(lái)加速。比如一個(gè)受玩家直接控制的、手感需要非常靈敏的角色。// 直接設(shè)置水平速度保持垂直速度不變?nèi)缰亓ο侣?Vector3 horizontalVelocity new Vector3(inputX, 0, inputY).normalized * moveSpeed; rb.velocity new Vector3(horizontalVelocity.x, rb.velocity.y, horizontalVelocity.z);直接修改velocity和angularVelocity角速度是即時(shí)的沒(méi)有加速過(guò)程。這給了你最大的控制權(quán)但也意味著你需要自己處理所有物理細(xì)節(jié)如慣性、阻力效果。通常這需要配合Kinematic模式或非常精細(xì)的腳本來(lái)模擬出令人舒適的手感。4.3 運(yùn)動(dòng)學(xué)移動(dòng)完全掌控當(dāng)Is Kinematic為true時(shí)你通過(guò)修改Transform來(lái)移動(dòng)物體。物理引擎不會(huì)計(jì)算它的運(yùn)動(dòng)但會(huì)計(jì)算它與其他物體的碰撞。void Update() { // 注意這里可以用Update因?yàn)椴簧婕拔锢砹?float move Input.GetAxis(Horizontal) * moveSpeed * Time.deltaTime; transform.Translate(move, 0, 0); // 物理引擎會(huì)基于這個(gè)移動(dòng)去計(jì)算并推開(kāi)沿途碰到的其他非運(yùn)動(dòng)學(xué)Rigidbody }這種方式適合需要與物理世界交互但運(yùn)動(dòng)軌跡必須由邏輯代碼或動(dòng)畫(huà)嚴(yán)格控制的物體。5. 高級(jí)應(yīng)用與性能優(yōu)化實(shí)戰(zhàn)5.1 剛體類(lèi)型選擇策略Static, Dynamic, Kinematic在實(shí)際項(xiàng)目中正確分類(lèi)物體是優(yōu)化和穩(wěn)定性的基礎(chǔ)。我們可以將場(chǎng)景中的物體分為三大類(lèi)Static靜態(tài)永遠(yuǎn)不會(huì)移動(dòng)的物體如地形、建筑墻壁。它們不應(yīng)該添加Rigidbody組件只需Collider并確保其GameObject的Static標(biāo)志被勾選這會(huì)影響光照烘焙和靜態(tài)批處理。物理引擎會(huì)為它們創(chuàng)建優(yōu)化的碰撞數(shù)據(jù)結(jié)構(gòu)性能最好。Dynamic動(dòng)態(tài)完全受物理引擎驅(qū)動(dòng)的物體如掉落的木箱、被踢飛的罐頭。它們需要RigidbodyIs Kinematic為false和Collider。這是最典型的物理物體。Kinematic運(yùn)動(dòng)學(xué)由代碼或動(dòng)畫(huà)驅(qū)動(dòng)但需要與物理世界交互的物體如移動(dòng)平臺(tái)、電梯、某些類(lèi)型的敵人。它們需要RigidbodyIs Kinematic為true和Collider。錯(cuò)誤示例給整個(gè)地形添加Rigidbody并設(shè)置為Dynamic但用腳本讓它不動(dòng)。這會(huì)導(dǎo)致物理引擎每幀都為其計(jì)算盡管速度為零造成巨大的性能浪費(fèi)。正確做法是將其設(shè)為Static。5.2 復(fù)雜剛體行為實(shí)現(xiàn)力場(chǎng)、懸浮與關(guān)節(jié)實(shí)現(xiàn)簡(jiǎn)單力場(chǎng)通過(guò)腳本在特定區(qū)域施加力。public class ForceField : MonoBehaviour { public float forceStrength 10.0f; public ForceMode forceMode ForceMode.Force; void OnTriggerStay(Collider other) { Rigidbody rb other.GetComponentRigidbody(); if (rb ! null) { // 計(jì)算從力場(chǎng)中心指向物體的方向并施加力 Vector3 direction (other.transform.position - transform.position).normalized; rb.AddForce(direction * forceStrength, forceMode); } } }實(shí)現(xiàn)磁懸浮效果結(jié)合AddForce和Raycast。public class Hover : MonoBehaviour { public float hoverHeight 2.0f; public float hoverForce 100.0f; public LayerMask groundLayer; private Rigidbody rb; void Start() { rb GetComponentRigidbody(); } void FixedUpdate() { RaycastHit hit; if (Physics.Raycast(transform.position, Vector3.down, out hit, hoverHeight * 2, groundLayer)) { float distanceToGround hit.distance; // 距離越近向上的力越大形成一個(gè)簡(jiǎn)單的PID控制這里只有P float forceRatio 1.0f - (distanceToGround / hoverHeight); Vector3 upliftForce Vector3.up * hoverForce * forceRatio; rb.AddForce(upliftForce); // 可以額外增加一些阻尼讓?xiě)腋「€(wěn)定 rb.AddForce(-rb.velocity * 0.5f); } } }使用關(guān)節(jié)對(duì)于需要連接在一起的物理物體如鉸鏈門(mén)、擺錘、布娃娃Unity提供了多種關(guān)節(jié)組件HingeJoint,FixedJoint,SpringJoint等。關(guān)節(jié)通過(guò)Rigidbody將兩個(gè)物體連接起來(lái)并定義它們之間的運(yùn)動(dòng)關(guān)系。這是構(gòu)建復(fù)雜物理機(jī)械的基礎(chǔ)。5.3 性能優(yōu)化與常見(jiàn)陷阱排查性能殺手清單過(guò)多的動(dòng)態(tài)剛體物理引擎最大的開(kāi)銷(xiāo)就是動(dòng)態(tài)剛體的數(shù)量。盡量將不需要移動(dòng)的物體設(shè)為Static。復(fù)雜的網(wǎng)格碰撞體對(duì)于復(fù)雜模型不要直接使用MeshCollider尤其是勾選Convex之前。應(yīng)使用簡(jiǎn)單的復(fù)合碰撞體如多個(gè)BoxCollider或CapsuleCollider來(lái)近似形狀。濫用連續(xù)碰撞檢測(cè)如之前所述只為真正高速移動(dòng)的物體啟用Continuous或Continuous Dynamic。阻止休眠檢查是否有持續(xù)存在的微小力或頻繁的WakeUp調(diào)用阻止了物體休眠。過(guò)小的固定時(shí)間步長(zhǎng)在Project Settings - Time中減小Fixed Timestep如從0.02改到0.01會(huì)提高物理精度但也會(huì)加倍物理更新頻率大幅增加CPU負(fù)擔(dān)。非必要不調(diào)整。常見(jiàn)問(wèn)題排查表現(xiàn)象可能原因解決方案物體抖動(dòng)或穿透1. 質(zhì)量比過(guò)于極端。2. 速度過(guò)快碰撞檢測(cè)模式為Discrete。3. 多個(gè)碰撞體重疊剛體初始化位置嵌入其他碰撞體。1. 調(diào)整質(zhì)量保持在合理比例0.1-10。2. 為高速物體啟用Continuous碰撞檢測(cè)。3. 確保場(chǎng)景開(kāi)始時(shí)剛體之間沒(méi)有嵌入或設(shè)置剛體為Kinematic并在Start中微調(diào)位置。物體運(yùn)動(dòng)“發(fā)飄”或難以控制1.Drag值過(guò)小。2. 使用AddForce模式不當(dāng)力太小或太大。3. 在Update中調(diào)用AddForce而非FixedUpdate。1. 適當(dāng)增加Drag0.5-3。2. 調(diào)整力的大小或嘗試VelocityChange模式進(jìn)行直接速度控制。3. 確保所有物理相關(guān)操作在FixedUpdate中進(jìn)行。物理表現(xiàn)不一致幀率高時(shí)正常幀率低時(shí)出問(wèn)題物理計(jì)算在FixedUpdate但運(yùn)動(dòng)渲染在Update。幀率波動(dòng)導(dǎo)致兩者不匹配。1. 對(duì)Rigidbody啟用Interpolate。2. 在跟隨物理物體的腳本如攝像機(jī)跟隨中將跟隨邏輯也放在FixedUpdate中或使用LateUpdate并基于Rigidbody的位置進(jìn)行插值。剛體不受力或力無(wú)效1.Is Kinematic被勾選。2. 在錯(cuò)誤的回調(diào)中調(diào)用如在Update中每幀調(diào)用AddForce但力太小被阻力瞬間抵消。3. 凍結(jié)了相關(guān)軸的位置或旋轉(zhuǎn)。1. 檢查Is Kinematic選項(xiàng)。2. 確保在FixedUpdate中施加足夠的力或檢查Drag是否過(guò)大。3. 檢查Constraints中是否凍結(jié)了運(yùn)動(dòng)方向。碰撞事件OnCollisionEnter不觸發(fā)1. 雙方至少一方?jīng)]有Rigidbody靜態(tài)碰撞體除外。2. 其中一方是Kinematic且兩者都是Kinematic時(shí)不會(huì)觸發(fā)標(biāo)準(zhǔn)碰撞事件。3. 碰撞體被設(shè)置為T(mén)rigger。1. 確保碰撞雙方都有Rigidbody或一方是靜態(tài)碰撞體。2.Kinematic與Kinematic之間不產(chǎn)生碰撞事件需用其他方式檢測(cè)。3.Trigger觸發(fā)的是OnTriggerEnter事件。掌握Rigidbody本質(zhì)上是在理解Unity物理引擎的“語(yǔ)言”和“脾氣”。它不是一個(gè)黑盒每一個(gè)屬性背后都有其設(shè)計(jì)邏輯和性能考量。最開(kāi)始可能會(huì)被各種問(wèn)題困擾但當(dāng)你理解了質(zhì)量、力、約束、檢測(cè)這些概念是如何交織在一起并開(kāi)始有意識(shí)地去設(shè)計(jì)和優(yōu)化場(chǎng)景中的物理對(duì)象時(shí)你會(huì)發(fā)現(xiàn)實(shí)現(xiàn)那些有趣的、真實(shí)的物理交互突然變得得心應(yīng)手了。記住多實(shí)驗(yàn)多觀察利用好這篇指南里的參數(shù)建議和排查表大部分物理“玄學(xué)”問(wèn)題都能找到根源。

相關(guān)新聞

高質(zhì)量數(shù)據(jù)集的特征

高質(zhì)量數(shù)據(jù)集的特征

通識(shí)高質(zhì)量數(shù)據(jù)集、行業(yè)通識(shí)高質(zhì)量數(shù)據(jù)集和行業(yè)專(zhuān)識(shí)高質(zhì)量數(shù)據(jù)集,都具有知識(shí)內(nèi)容、來(lái)源類(lèi)型、時(shí)效性、標(biāo)注人員類(lèi)型、敏感程度、模型類(lèi)型、主題范圍等方面的特征。知識(shí)內(nèi)容指數(shù)據(jù)集中數(shù)據(jù)所蘊(yùn)含知識(shí)的專(zhuān)業(yè)性、知識(shí)深度和目標(biāo)受眾;來(lái)源類(lèi)型指數(shù)據(jù)集中數(shù)據(jù)的獲取來(lái)源&…

2026/8/2 14:06:11 閱讀更多
串口藍(lán)牙模塊實(shí)戰(zhàn)指南:從原理到Arduino智能小車(chē)遙控應(yīng)用

串口藍(lán)牙模塊實(shí)戰(zhàn)指南:從原理到Arduino智能小車(chē)遙控應(yīng)用

1. 項(xiàng)目概述:為什么我們還需要一個(gè)串口藍(lán)牙模塊?在物聯(lián)網(wǎng)和智能硬件項(xiàng)目里,無(wú)線通信幾乎是標(biāo)配。Wi-Fi、藍(lán)牙、LoRa、Zigbee……選擇很多。但如果你問(wèn)一個(gè)經(jīng)常搗鼓Arduino、樹(shù)莓派或者ESP32的開(kāi)發(fā)者,哪種無(wú)線連接方式最“無(wú)腦”、…

2026/8/2 14:06:11 閱讀更多
TRELLIS.2 3D生成終極指南:從圖像到專(zhuān)業(yè)級(jí)3D資產(chǎn)的快速轉(zhuǎn)換

TRELLIS.2 3D生成終極指南:從圖像到專(zhuān)業(yè)級(jí)3D資產(chǎn)的快速轉(zhuǎn)換

TRELLIS.2 3D生成終極指南:從圖像到專(zhuān)業(yè)級(jí)3D資產(chǎn)的快速轉(zhuǎn)換 【免費(fèi)下載鏈接】TRELLIS.2 Native and Compact Structured Latents for 3D Generation 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/tr/TRELLIS.2 在數(shù)字內(nèi)容創(chuàng)作領(lǐng)域,將2D圖像轉(zhuǎn)換…

2026/8/2 14:06:11 閱讀更多
UGV懸掛系統(tǒng)設(shè)計(jì)實(shí)戰(zhàn):雙橫臂結(jié)構(gòu)選型與調(diào)校指南

UGV懸掛系統(tǒng)設(shè)計(jì)實(shí)戰(zhàn):雙橫臂結(jié)構(gòu)選型與調(diào)校指南

1. 項(xiàng)目緣起:從“硬碰硬”到“軟著陸”的探索在無(wú)人地面車(chē)輛(UGV)的研發(fā)與改裝領(lǐng)域,懸掛系統(tǒng)(Suspension)常常是決定其性能上限與可靠性的關(guān)鍵,卻也是最容易被忽視的環(huán)節(jié)。很多初入此道的朋友&a…

2026/8/2 15:56:24 閱讀更多
GTA5線上小助手:3個(gè)核心功能幫你快速掌控洛圣都

GTA5線上小助手:3個(gè)核心功能幫你快速掌控洛圣都

GTA5線上小助手:3個(gè)核心功能幫你快速掌控洛圣都 【免費(fèi)下載鏈接】GTA5OnlineTools GTA5線上小助手 項(xiàng)目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools GTA5線上小助手是一款專(zhuān)為《俠盜獵車(chē)手5》線上模式玩家設(shè)計(jì)的輔助工具,通過(guò)簡(jiǎn)單易…

2026/8/2 15:56:24 閱讀更多
徹底解決PCSX2模擬器啟動(dòng)崩潰:Visual C++運(yùn)行時(shí)庫(kù)完整修復(fù)指南

徹底解決PCSX2模擬器啟動(dòng)崩潰:Visual C++運(yùn)行時(shí)庫(kù)完整修復(fù)指南

徹底解決PCSX2模擬器啟動(dòng)崩潰:Visual C運(yùn)行時(shí)庫(kù)完整修復(fù)指南 【免費(fèi)下載鏈接】pcsx2 PCSX2 - The Playstation 2 Emulator 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/pc/pcsx2 當(dāng)您滿(mǎn)懷期待地下載了PCSX2模擬器,準(zhǔn)備重溫經(jīng)典的PlayStation …

2026/8/2 15:56:24 閱讀更多
5分鐘掌握My-TODOs:你的跨平臺(tái)桌面任務(wù)管理神器

5分鐘掌握My-TODOs:你的跨平臺(tái)桌面任務(wù)管理神器

5分鐘掌握My-TODOs:你的跨平臺(tái)桌面任務(wù)管理神器 【免費(fèi)下載鏈接】My-TODOs A cross-platform desktop To-Do list. 跨平臺(tái)桌面待辦小工具 項(xiàng)目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 還在為繁雜的待辦事項(xiàng)而煩惱嗎?想要一款既簡(jiǎn)潔又強(qiáng)…

2026/8/2 15:46:23 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多