diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs
index 72a07711b9..85412e6db5 100644
--- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs
+++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs
@@ -42,20 +42,11 @@ internal Vrm10RuntimeLookAt(Vrm10Instance instance, UniHumanoid.Humanoid humanoi
{
_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;
+ LookAtOriginTransform = InitializeLookAtOriginTransform(
+ humanoid,
+ controlRig,
+ _lookAt.OffsetFromHead,
+ instance.transform.rotation);
_lookAtOriginTransformLocalPosition = LookAtOriginTransform.localPosition;
_lookAtOriginTransformLocalRotation = LookAtOriginTransform.localRotation;
@@ -108,6 +99,39 @@ public void SetYawPitchManually(float yaw, float pitch)
return (yaw, pitch);
}
+ ///
+ /// Generate empty object for gaze calculation.
+ /// NOTE: このメソッドを実行するとき、モデル全体は初期姿勢(T-Pose)でなければならない。
+ /// NOTE: Vrm10Instance.Runtime 呼び出しによりトリガーされる。
+ /// From v0.127.0: VRM Root( Vrm10Instance が Add されている)GameObject は初期姿勢でなくてもよい #2445
+ ///
+ ///
+ /// if provided parent is controlrig head else humanoid head
+ /// A humanoid head local offset
+ /// world rotation of vrm model
+ ///
+ private static Transform InitializeLookAtOriginTransform(UniHumanoid.Humanoid humanoid, Vrm10RuntimeControlRig controlRig,
+ Vector3 eyeOffsetValue, Quaternion rootRotation)
+ {
+ var lookAtOrigin = new GameObject("_look_at_origin_").transform;
+ if (controlRig != null)
+ {
+ // controlRig のHeadに連結
+ lookAtOrigin.SetParent(controlRig.GetBoneTransform(HumanBodyBones.Head));
+ }
+ else
+ {
+ // humanoid のHeadに連結
+ lookAtOrigin.SetParent(humanoid.Head);
+ }
+
+ lookAtOrigin.position = humanoid.Head.TransformPoint(eyeOffsetValue);
+ // v0.127.0
+ lookAtOrigin.rotation = rootRotation;
+
+ return lookAtOrigin;
+ }
+
#region Obsolete
[Obsolete("Use " + nameof(LookAtOriginTransform))]
public Transform GetLookAtOrigin(Transform head)