版本: Unity 6 (6000.0)
语言英语
  • C#

Joint.massScale

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public float massScale;

描述

应用于刚体在求解约束之前的逆质量和惯性张量的比例。

缩放质量和惯性张量,使关节求解器更快收敛,从而减少典型布娃娃肢体的拉伸。与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); } }