Joint.massScale
Declaration
public float massScale;Описание
Масштаб, который должен применяться к обратной массе и тензору инерции тела до решения проблем ограничений.
Масштабировка массы и тензора инерции, чтобы решить проблему сближения суставов быстрее, что приведет к меньшему растянутым конечностям типичной ragdoll. Наиболее полезно в сочетании с Joint.connectedMassScale.
Например, если у вас есть два объекта в ragdoll масс 1 и 10, движок физики обычно решит проблему сближения, изменяя скорость более легкого тела гораздо больше, чем более тяжелого. Применение масштаба массы 10 к первому телу заставляет решить проблему сближения изменить скорость обоих тел на равное количество. Применение масштабов массы таким образом, что соединитель видит одинаковые эффективные массы и инерции заставляет решить проблему сближения быстрее, что может сделать отдельные суставы выглядеть менее резиновыми или разделенными, и наборы соединенных тел выглядят менее вздутыми
Обратите внимание, что масштабирование массы и инерции является фундаментально нефизическим и импульс не будет сохраняться.
Следующий скрипт полезен для настройки масштабирования массы и инерции, чтобы получить одну и ту же корректирующую скорость из решателя. Присоедините его к корню ragdoll, или к конечности, которая чрезмерно растянута во время игры, и он найдет все суставы в иерархии преобразований ниже себя и настроит масштаб массы.
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); } }