Unity-關(guān)節(jié)和布娃娃穩(wěn)定性
本頁(yè)提供有關(guān)改善關(guān)節(jié)和布娃娃穩(wěn)定性的技巧。
避免將?Angular Y Limit?和?Angular Z Limit?設(shè)置為較小的關(guān)節(jié)角度。根據(jù)具體設(shè)置,為了保持穩(wěn)定,最小角度應(yīng)在 5 到 15 度左右。嘗試將角度設(shè)置為零,而不是使用小角度。這樣會(huì)鎖定軸并提供穩(wěn)定的模擬。
取消選中關(guān)節(jié)的?Enable Preprocessing?屬性。通過(guò)禁用預(yù)處理,可在關(guān)節(jié)被強(qiáng)制進(jìn)入無(wú)法滿足關(guān)節(jié)約束條件的情況時(shí)幫助防止關(guān)節(jié)不規(guī)律地分離或移動(dòng)。如果通過(guò)關(guān)節(jié)連接的剛體組件被靜態(tài)碰撞幾何體拉開(kāi)(例如,在墻內(nèi)不完整生成布娃娃),則會(huì)發(fā)生這種情況。
在極端情況下(例如在墻內(nèi)不完整生成布娃娃或用大力推動(dòng)布娃娃),關(guān)節(jié)解算器無(wú)法將布娃娃的剛體組件保持在一起。這種情況下可能導(dǎo)致拉伸。要解決此問(wèn)題,請(qǐng)使用?ConfigurableJoint.projectionMode?或?CharacterJoint.enableProjection?在關(guān)節(jié)上啟用投影。
如果與關(guān)節(jié)連接的剛體組件抖動(dòng),請(qǐng)打開(kāi)?Physics?窗口(__Edit__ >?Project Settings__,然后選擇?Physics__ 類別)并嘗試將?Default Solver Iterations?值增加到 10 到 20 之間。
如果與關(guān)節(jié)連接的剛體組件未準(zhǔn)確響應(yīng)反彈,請(qǐng)打開(kāi)?Physics?窗口(__Edit__ >?Project Settings__,然后選擇?Physics__ 類別)并嘗試將?Default Solver Velocity Iterations?值增加到 10 到 20 之間。
在運(yùn)動(dòng)剛體組件由關(guān)節(jié)連接到其他剛體組件情況下,切勿使用直接變換訪問(wèn)。這樣做會(huì)跳過(guò) PhysX 計(jì)算相應(yīng)剛體組件的內(nèi)部速度的步驟,導(dǎo)致解算器提供意外的結(jié)果。一種常見(jiàn)的錯(cuò)誤實(shí)踐例子是在 2D 項(xiàng)目中使用直接變換訪問(wèn)通過(guò)在骨架的根節(jié)點(diǎn)上更改?Transform.TransformDirection?來(lái)翻轉(zhuǎn)角色。如果改用?Rigidbody2D.MovePosition?和?Rigidbody2D.MoveRotation,那么此行為會(huì)改善很多。
避免關(guān)節(jié)連接的剛體組件之間的質(zhì)量差異過(guò)大。一個(gè)剛體質(zhì)量是另一個(gè)剛體質(zhì)量的兩倍是可以的,但當(dāng)一個(gè)剛體質(zhì)量比另一個(gè)剛體質(zhì)量大十倍時(shí),模擬就會(huì)變得不穩(wěn)定。
盡量避免在包含剛體或關(guān)節(jié)的變換組件中使用不等于 1 的縮放。這樣的縮放不可能在所有情況下都可靠。
如果剛體組件在插入到世界后發(fā)生重疊,并且無(wú)法避免重疊,請(qǐng)嘗試降低?Rigidbody.maxDepenetrationVelocity?使剛體組件更加平滑地相互退出。