lookAt は root と同じ向きが初期姿勢

LookAtOriginTransform.rotation = instance.transform.rotation;
This commit is contained in:
ousttrue
2024-09-24 18:06:56 +09:00
parent 3bc6a672ec
commit 952730c446
2 changed files with 19 additions and 18 deletions

View File

@@ -56,7 +56,7 @@ namespace UniVRM10
ControlRig = new Vrm10RuntimeControlRig(instance.Humanoid, m_instance.transform);
}
Constraints = instance.GetComponentsInChildren<IVrm10Constraint>();
LookAt = new Vrm10RuntimeLookAt(instance.Vrm.LookAt, instance.Humanoid, ControlRig);
LookAt = new Vrm10RuntimeLookAt(instance, instance.Humanoid, ControlRig);
Expression = new Vrm10RuntimeExpression(instance, LookAt.EyeDirectionApplicable);
SpringBone = springBoneRuntime;
}

View File

@@ -38,13 +38,25 @@ namespace UniVRM10
/// </summary>
public Transform LookAtOriginTransform { get; }
internal Vrm10RuntimeLookAt(VRM10ObjectLookAt lookAt, UniHumanoid.Humanoid humanoid, Vrm10RuntimeControlRig controlRig)
internal Vrm10RuntimeLookAt(Vrm10Instance instance, UniHumanoid.Humanoid humanoid, Vrm10RuntimeControlRig controlRig)
{
_lookAt = lookAt;
LookAtOriginTransform = InitializeLookAtOriginTransform(
humanoid.Head,
controlRig != null ? controlRig.GetBoneTransform(HumanBodyBones.Head) : humanoid.Head,
_lookAt.OffsetFromHead);
_lookAt = instance.Vrm.LookAt;
// 視点計算用の empty object
LookAtOriginTransform = new GameObject("_look_at_origin_").transform;
if (controlRig != null)
{
// controlRig に連結
LookAtOriginTransform.SetParent(controlRig.GetBoneTransform(HumanBodyBones.Head));
}
else
{
// 直接連結
LookAtOriginTransform.SetParent(humanoid.Head);
}
LookAtOriginTransform.position = humanoid.Head.TransformPoint(_lookAt.OffsetFromHead);
LookAtOriginTransform.rotation = instance.transform.rotation;
_lookAtOriginTransformLocalPosition = LookAtOriginTransform.localPosition;
_lookAtOriginTransformLocalRotation = LookAtOriginTransform.localRotation;
@@ -96,17 +108,6 @@ namespace UniVRM10
return (yaw, pitch);
}
private static Transform InitializeLookAtOriginTransform(Transform rawHead, Transform actualHead, Vector3 eyeOffsetValue)
{
// NOTE: このメソッドを実行するとき、モデル全体は初期姿勢T-Poseでなければならない。
var lookAtOrigin = new GameObject("_look_at_origin_").transform;
lookAtOrigin.SetParent(actualHead);
lookAtOrigin.position = rawHead.TransformPoint(eyeOffsetValue);
lookAtOrigin.rotation = Quaternion.identity;
return lookAtOrigin;
}
#region Obsolete
[Obsolete("Use " + nameof(LookAtOriginTransform))]
public Transform GetLookAtOrigin(Transform head)