From 4f8e98e065b6a159b91d74c2d21226374074398a Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 25 Sep 2024 15:32:11 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=80=82InitializeLookAtOriginTransform?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Vrm10Runtime/Vrm10RuntimeLookAt.cs | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs index 72a07711b..85412e6db 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeLookAt.cs @@ -42,20 +42,11 @@ namespace UniVRM10 { _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 @@ namespace UniVRM10 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)