From 615ce48e8e665b4717a6e675aa1bc471ec072dac Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 26 Sep 2018 20:13:40 +0900 Subject: [PATCH] VRMLookAtHead.Head to Transform --- Scripts/LookAt/Editor/VRMLookAtHeadEditor.cs | 18 +++++----- Scripts/LookAt/LookAtTargetSwitcher.cs | 4 +-- Scripts/LookAt/VRMLookAtBoneApplyer.cs | 4 +-- Scripts/LookAt/VRMLookAtHead.cs | 38 +++++++++++--------- 4 files changed, 34 insertions(+), 30 deletions(-) diff --git a/Scripts/LookAt/Editor/VRMLookAtHeadEditor.cs b/Scripts/LookAt/Editor/VRMLookAtHeadEditor.cs index aef9dd20b..c5f8cfd70 100644 --- a/Scripts/LookAt/Editor/VRMLookAtHeadEditor.cs +++ b/Scripts/LookAt/Editor/VRMLookAtHeadEditor.cs @@ -106,7 +106,7 @@ namespace VRM public override void OnPreviewGUI(Rect r, GUIStyle background) { m_previewRenderUtility.BeginPreview(r, background); - var target = m_target.Head.Transform; + var target = m_target.Head; if (target != null) { #if UNITY_2017_1_OR_NEWER @@ -145,7 +145,7 @@ namespace VRM //if (!Application.isPlaying) return; if (!m_target.DrawGizmo) return; if (m_target.Target == null) return; - if (m_target.Head.Transform == null) return; + if (m_target.Head == null) return; { EditorGUI.BeginChangeCheck(); @@ -158,25 +158,25 @@ namespace VRM } Handles.color = new Color(1, 1, 1, 0.6f); - Handles.DrawDottedLine(m_target.Head.Transform.position, m_target.Target.position, 4.0f); + Handles.DrawDottedLine(m_target.Head.position, m_target.Target.position, 4.0f); - Handles.matrix = m_target.Head.InitialWorldMatrix; + Handles.matrix = m_target.Head.localToWorldMatrix; Handles.Label(Vector3.zero, string.Format("Yaw: {0:0.}degree\nPitch: {1:0.}degree", m_target.Yaw, m_target.Pitch)); Handles.color = new Color(0, 1, 0, 0.2f); Handles.DrawSolidArc(Vector3.zero, - m_target.Head.OffsetRotation.GetColumn(1), - m_target.Head.OffsetRotation.GetColumn(2), + Matrix4x4.identity.GetColumn(1), + Matrix4x4.identity.GetColumn(2), m_target.Yaw, RADIUS); - Handles.matrix = m_target.Head.InitialWorldMatrix * m_target.YawMatrix; + Handles.matrix = m_target.Head.localToWorldMatrix * m_target.YawMatrix; Handles.color = new Color(1, 0, 0, 0.2f); Handles.DrawSolidArc(Vector3.zero, - m_target.Head.OffsetRotation.GetColumn(0), - m_target.Head.OffsetRotation.GetColumn(2), + Matrix4x4.identity.GetColumn(0), + Matrix4x4.identity.GetColumn(2), -m_target.Pitch, RADIUS); } diff --git a/Scripts/LookAt/LookAtTargetSwitcher.cs b/Scripts/LookAt/LookAtTargetSwitcher.cs index f8d3ad1d0..a4a33ed7c 100644 --- a/Scripts/LookAt/LookAtTargetSwitcher.cs +++ b/Scripts/LookAt/LookAtTargetSwitcher.cs @@ -26,7 +26,7 @@ namespace VRM float CalcScore(Transform target) { - return Vector3.Dot(m_lookAtHead.Head.WorldForward, target.position - m_lookAtHead.Head.Transform.position); + return Vector3.Dot(m_lookAtHead.Head.forward, target.position - m_lookAtHead.Head.position); } Transform ChooseTarget() @@ -65,7 +65,7 @@ namespace VRM if (target == null) { // forward - targetPosition = m_lookAtHead.Head.Transform.position + m_lookAtHead.Head.WorldForward * 20.0f; + targetPosition = m_lookAtHead.Head.position + m_lookAtHead.Head.forward * 20.0f; } else { diff --git a/Scripts/LookAt/VRMLookAtBoneApplyer.cs b/Scripts/LookAt/VRMLookAtBoneApplyer.cs index 9acd842a9..aaca67796 100644 --- a/Scripts/LookAt/VRMLookAtBoneApplyer.cs +++ b/Scripts/LookAt/VRMLookAtBoneApplyer.cs @@ -123,8 +123,8 @@ namespace VRM if (LeftEye.Transform != null && RightEye.Transform != null) { // 目に値を適用する - LeftEye.Transform.rotation = LeftEye.InitialWorldMatrix.ExtractRotation() * m_head.Head.OffsetRotation.YawPitchRotation(leftYaw, pitch); - RightEye.Transform.rotation = RightEye.InitialWorldMatrix.ExtractRotation() * m_head.Head.OffsetRotation.YawPitchRotation(rightYaw, pitch); + LeftEye.Transform.rotation = LeftEye.InitialWorldMatrix.ExtractRotation() * Matrix4x4.identity.YawPitchRotation(leftYaw, pitch); + RightEye.Transform.rotation = RightEye.InitialWorldMatrix.ExtractRotation() * Matrix4x4.identity.YawPitchRotation(rightYaw, pitch); } } } diff --git a/Scripts/LookAt/VRMLookAtHead.cs b/Scripts/LookAt/VRMLookAtHead.cs index 2888ba870..f83598ecf 100644 --- a/Scripts/LookAt/VRMLookAtHead.cs +++ b/Scripts/LookAt/VRMLookAtHead.cs @@ -13,6 +13,13 @@ namespace VRM LateUpdate, } + /// + /// Headボーンローカルで目標物のYaw, Pitchを求めて目線に適用する + /// + /// * VRMLookAtBoneApplyer + /// * VRMLookAtBlendShapeApplyer + /// + /// public class VRMLookAtHead : MonoBehaviour, IVRMComponent { public bool DrawGizmo = true; @@ -24,7 +31,7 @@ namespace VRM public Transform Target; [SerializeField] - public OffsetOnTransform Head; + public Transform Head; #region Thumbnail public Texture2D CreateThumbnail() @@ -64,15 +71,14 @@ namespace VRM public void LookFace(Transform t) { - if (Head.Transform == null) return; - var head = Head.Transform; - var headPosition = head.position + new Vector3(0, 0.05f, 0); - t.position = headPosition + Head.WorldMatrix.ExtractRotation() * new Vector3(0, 0, 0.7f); + if (Head == null) return; + var headPosition = Head.position + new Vector3(0, 0.05f, 0); + t.position = headPosition + Head.localToWorldMatrix.ExtractRotation() * new Vector3(0, 0, 0.7f); t.LookAt(headPosition); } #endregion - public void OnImported(VRMImporterContext context) + void Awake() { var animator = GetComponent(); if (animator == null) @@ -88,8 +94,11 @@ namespace VRM return; } - Head = OffsetOnTransform.Create(head); + Head = head; + } + public void OnImported(VRMImporterContext context) + { var gltfFirstPerson = context.GLTF.extensions.VRM.firstPerson; switch (gltfFirstPerson.lookAtType) { @@ -109,11 +118,6 @@ namespace VRM } } - private void Start() - { - Head.Setup(); - } - static Matrix4x4 LookAtMatrixFromWorld(Vector3 from, Vector3 target) { var pos = new Vector4(from.x, from.y, from.z, 1); @@ -137,7 +141,7 @@ namespace VRM { get { - var yaw = Quaternion.AngleAxis(m_yaw, Head.OffsetRotation.GetColumn(1)); + var yaw = Quaternion.AngleAxis(m_yaw, Vector3.up); var m = default(Matrix4x4); m.SetTRS(Vector3.zero, yaw, Vector3.one); return m; @@ -159,7 +163,7 @@ namespace VRM } public event Action YawPitchChanged; - void RaiseYawPitchChanged(float yaw, float pitch) + public void RaiseYawPitchChanged(float yaw, float pitch) { m_yaw = yaw; m_pitch = pitch; @@ -172,7 +176,7 @@ namespace VRM private void Update() { - if(UpdateType==UpdateType.Update) + if (UpdateType == UpdateType.Update) { LookWorldPosition(); } @@ -196,8 +200,8 @@ namespace VRM public void LookWorldPosition(Vector3 targetPosition, out float yaw, out float pitch) { - var localPosition = Head.InitialWorldMatrix.inverse.MultiplyPoint(targetPosition); - Head.OffsetRotation.CalcYawPitch(localPosition, out yaw, out pitch); + var localPosition = Head.worldToLocalMatrix.MultiplyPoint(targetPosition); + Matrix4x4.identity.CalcYawPitch(localPosition, out yaw, out pitch); RaiseYawPitchChanged(yaw, pitch); } }