mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-28 05:44:48 -05:00
Merge pull request #1986 from Santarh/lookAtHierarcy
Add a LookAtOrigin transform to ControlRig.
This commit is contained in:
@@ -63,7 +63,7 @@ namespace UniVRM10
|
||||
ControlRig = new Vrm10RuntimeControlRig(target.Humanoid, m_target.transform, controlRigInitialRotations);
|
||||
}
|
||||
Constraints = target.GetComponentsInChildren<IVrm10Constraint>();
|
||||
LookAt = new Vrm10RuntimeLookAt(target.Vrm.LookAt, target.Humanoid, m_head);
|
||||
LookAt = new Vrm10RuntimeLookAt(target.Vrm.LookAt, target.Humanoid, ControlRig);
|
||||
Expression = new Vrm10RuntimeExpression(target, LookAt, LookAt.EyeDirectionApplicable);
|
||||
|
||||
var instance = target.GetComponent<RuntimeGltfInstance>();
|
||||
|
||||
@@ -30,11 +30,13 @@ namespace UniVRM10
|
||||
/// </summary>
|
||||
public Transform LookAtOriginTransform { get; }
|
||||
|
||||
internal Vrm10RuntimeLookAt(VRM10ObjectLookAt lookAt, UniHumanoid.Humanoid humanoid, Transform head)
|
||||
internal Vrm10RuntimeLookAt(VRM10ObjectLookAt lookAt, UniHumanoid.Humanoid humanoid, Vrm10RuntimeControlRig controlRig)
|
||||
{
|
||||
_lookAt = lookAt;
|
||||
_head = head;
|
||||
LookAtOriginTransform = InitializeEyePositionTransform(_head, _lookAt.OffsetFromHead);
|
||||
LookAtOriginTransform = InitializeLookAtOriginTransform(
|
||||
humanoid.Head,
|
||||
controlRig != null ? controlRig.GetBoneTransform(HumanBodyBones.Head) : humanoid.Head,
|
||||
_lookAt.OffsetFromHead);
|
||||
_lookAtOriginTransformLocalPosition = LookAtOriginTransform.localPosition;
|
||||
_lookAtOriginTransformLocalRotation = LookAtOriginTransform.localRotation;
|
||||
|
||||
@@ -92,17 +94,17 @@ namespace UniVRM10
|
||||
return (yaw, pitch);
|
||||
}
|
||||
|
||||
private static Transform InitializeEyePositionTransform(Transform head, Vector3 eyeOffsetValue)
|
||||
private static Transform InitializeLookAtOriginTransform(Transform rawHead, Transform actualHead, Vector3 eyeOffsetValue)
|
||||
{
|
||||
if (!Application.isPlaying) return null;
|
||||
|
||||
// NOTE: このメソッドを実行するとき、モデル全体は初期姿勢(T-Pose)でなければならない。
|
||||
var eyePositionTransform = new GameObject("_eye_transform_").transform;
|
||||
eyePositionTransform.SetParent(head);
|
||||
eyePositionTransform.localPosition = eyeOffsetValue;
|
||||
eyePositionTransform.rotation = Quaternion.identity;
|
||||
var lookAtOrigin = new GameObject("_look_at_origin_").transform;
|
||||
lookAtOrigin.SetParent(actualHead);
|
||||
lookAtOrigin.position = rawHead.TransformPoint(eyeOffsetValue);
|
||||
lookAtOrigin.rotation = Quaternion.identity;
|
||||
|
||||
return eyePositionTransform;
|
||||
return lookAtOrigin;
|
||||
}
|
||||
|
||||
#region Obsolete
|
||||
|
||||
Reference in New Issue
Block a user