UniVRM
UniVRM copied to clipboard
スケールを変更するとSpringBoneが正しく動作していない?
環境情報
- UniVRM version:
0.124.2 - Unity version:
Unity-6000.0.40f1 - OS:
Windows 11
バグについて
-
バグの内容 モデルのScaleを変更すると、SpringBoneが正しく動作していないように見えます。 分かりやすいのは、Scaleを極端に小さくした時に意図しない状態になっていそうです。
-
ConsoleLog 特になし
-
スクリーンショット
-
再現方法 モデルのScale値を変更する。
-
その他 試しに、
Runtime/Components/SpringBone/VRM10SpringBoneJoint.csへ以下を追記すると、一見するとそれっぽく動作しているように見えますが、Startで行っているため、
- 実行中のスケール変化には対応できない
- そもそもこの対応で良いのか?
といった事がわかっておりません。
private void Start()
{
float avrgScale = (transform.lossyScale.x + transform.lossyScale.y + transform.lossyScale.z) / 3f;
m_stiffnessForce *= avrgScale;
m_gravityPower *= avrgScale;
m_jointRadius *= avrgScale;
}
https://vrm.dev/api/springbone/vrm1/IVrm10SpringBoneRuntime/
に関連情報があります。 以下の関数でスケール変更後などに最初期化ができます。
vrm.Runtime.Springbone.ReconstructSpringBone();
また以下の関数で目的が達成できるかもしれません。
Vrm10Instance vrm;
vrm.Runtime.Springbone.SetModelLevel(vrm.transform, new {
SupportsScalingAtRuntime = true, // <-- スケールの挙動変更。角速度を維持するようにロジックが変わる
});