应用于刚体在求解约束之前的逆质量和惯性张量的比例。
缩放质量和惯性张量,使关节求解器更快收敛,从而减少典型布娃娃肢体的拉伸。与Joint.connectedMassScale结合使用最为有效。
例如,如果布娃娃中有两个质量分别为 1 和 10 的物体,物理引擎通常会通过改变较轻物体的速度来解决关节,而不是改变较重物体的速度。将质量比例为 10 应用于第一个物体,使求解器以相等的数量改变两个物体的速度。应用质量比例,使关节看到类似的有效质量和惯性,这使得求解器更快收敛,这可以使单个关节看起来不太像橡胶或分离,并且使一组连接的物体看起来不太抽搐。
请注意,缩放质量和惯性从根本上来说是非物理的,动量不会守恒。
以下脚本可用于调整质量和惯性缩放,以便从求解器中获得相同的校正速度。将其附加到布娃娃的根部或在游戏过程中过度拉伸的肢体上,它将找到自身下方变换层次结构中的所有关节并调整质量比例。
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class NormalizeMass : MonoBehaviour { private void Apply(Transform root) { var j = root.GetComponent<Joint>();
// Apply the inertia scaling if possible if (j && j.connectedBody) { // Make sure that both of the connected bodies will be moved by the solver with equal speed j.massScale = j.connectedBody.mass / root.GetComponent<Rigidbody>().mass; j.connectedMassScale = 1f; }
// Continue for all children... for (int childId = 0; childId < root.childCount; ++childId) { Apply(root.GetChild(childId)); } }
public void Start() { Apply(this.transform); } }