diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs index 1e74ccca6..fbe655c63 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs @@ -56,7 +56,7 @@ namespace UniVRM10 ControlRig = new Vrm10RuntimeControlRig(instance.Humanoid, m_instance.transform); } Constraints = instance.GetComponentsInChildren(); - LookAt = new Vrm10RuntimeLookAt(instance.Vrm.LookAt, instance.Humanoid, ControlRig); + LookAt = new Vrm10RuntimeLookAt(instance, instance.Humanoid, ControlRig); Expression = new Vrm10RuntimeExpression(instance, LookAt.EyeDirectionApplicable); SpringBone = springBoneRuntime; } diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs index c7b3d0c1d..72a07711b 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs @@ -38,13 +38,25 @@ namespace UniVRM10 /// 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)