要在解算约束之前应用于身体的反向质量和惯性张量的缩放比例。
缩放质量和惯性张量以便使关节解算器更快收敛,从而使典型布娃娃的四肢拉伸较少。与 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); } }