This commit is contained in:
ousttrue 2024-08-30 17:37:30 +09:00
parent 2cc166f193
commit fc1b2a80fd
2 changed files with 10 additions and 4 deletions

View File

@ -15,14 +15,20 @@ namespace VRM.SpringBone
public float Length;
public Quaternion LocalRotation;
public Quaternion CalcRotation(Transform m_transform, Vector3 nextTail)
/// <summary>
/// しっぽの位置から回転を計算する
/// </summary>
public Quaternion WorldRotationFromTailPosition(Transform m_transform, Vector3 nextTail)
{
var rotation = (m_transform.parent != null ? m_transform.parent.rotation : Quaternion.identity) * LocalRotation;
return Quaternion.FromToRotation(rotation * BoneAxis,
nextTail - m_transform.position) * rotation;
}
public Vector3 CalcNextTail(float deltaTime, Transform center, Transform m_transform,
/// <summary>
/// Verlet積分で次の位置を計算する
/// </summary>
public Vector3 VerletIntegration(float deltaTime, Transform center, Transform m_transform,
SpringBoneSettings settings, SpringBoneJointState _state)
{
var state = _state.ToWorld(center);

View File

@ -108,7 +108,7 @@ namespace VRM.SpringBone
var (transform, init, state) = m_joints[i];
// Spring処理
var nextTail = init.CalcNextTail(deltaTime, scene.Center, transform, settings, state);
var nextTail = init.VerletIntegration(deltaTime, scene.Center, transform, settings, state);
// Collision
foreach (var collider in m_colliders)
@ -120,7 +120,7 @@ namespace VRM.SpringBone
m_joints[i] = (transform, init, SpringBoneJointState.Make(scene.Center, currentTail: state.CurrentTail, nextTail: nextTail));
//回転を適用
var r = init.CalcRotation(transform, nextTail);
var r = init.WorldRotationFromTailPosition(transform, nextTail);
transform.rotation = r;
}
}