public PoseManipulation(Transform objectTransform, RigController controller, Transform mouthpiece, RotationAxis axis) { MeshController = controller; oTransform = objectTransform; poseMode = AnimationTool.PoseEditMode.AC; switch (axis) { case RotationAxis.X: acAxis = oTransform.right; initForward = oTransform.up; break; case RotationAxis.Y: acAxis = oTransform.up; initForward = oTransform.forward; break; case RotationAxis.Z: acAxis = oTransform.forward; initForward = oTransform.right; break; } previousAngle = Vector3.SignedAngle(initForward, mouthpiece.position - objectTransform.position, acAxis); movedObjects = new List <GameObject>() { oTransform.gameObject }; startPositions = new List <Vector3>() { oTransform.localPosition }; endPositions = new List <Vector3>() { oTransform.localPosition }; startRotations = new List <Quaternion>() { oTransform.localRotation }; endRotations = new List <Quaternion>() { oTransform.localRotation }; startScales = new List <Vector3>() { oTransform.localScale }; endScales = new List <Vector3>() { oTransform.localScale }; }
public PoseManipulation(Transform objectTransform, List <Transform> objectHierarchy, Transform mouthpiece, RigController skinController, AnimationTool.PoseEditMode mode) { MeshController = skinController; poseMode = mode; oTransform = objectTransform; fullHierarchy = new List <Transform>(objectHierarchy); if (!fullHierarchy.Contains(objectTransform)) { fullHierarchy.Add(objectTransform); } hierarchySize = fullHierarchy.Count; InitialTRS = Matrix4x4.TRS(oTransform.localPosition, oTransform.localRotation, oTransform.localScale); initialMouthMatrix = mouthpiece.worldToLocalMatrix; InitialParentMatrix = oTransform.parent.localToWorldMatrix; InitialParentMatrixWorldToLocal = oTransform.parent.worldToLocalMatrix; InitialTRS = Matrix4x4.TRS(oTransform.localPosition, oTransform.localRotation, oTransform.localScale); initialTransformMatrix = oTransform.localToWorldMatrix; rootScale = skinController.transform.localScale.x; controllers = new List <RigGoalController>(); for (int i = 0; i < hierarchySize; i++) { controllers.Add(fullHierarchy[i].GetComponent <RigGoalController>()); } if (mode == AnimationTool.PoseEditMode.FK || fullHierarchy.Count == 1) { movedObjects = new List <GameObject>() { oTransform.gameObject }; startPositions = new List <Vector3>() { oTransform.localPosition }; endPositions = new List <Vector3>() { oTransform.localPosition }; startRotations = new List <Quaternion>() { oTransform.localRotation }; endRotations = new List <Quaternion>() { oTransform.localRotation }; startScales = new List <Vector3> { oTransform.localScale }; endScales = new List <Vector3> { oTransform.localScale }; fromRotation = Quaternion.FromToRotation(Vector3.forward, oTransform.localPosition) * Vector3.forward; if (hierarchySize > 2) { initialRotation = fullHierarchy[hierarchySize - 2].localRotation; movedObjects.Add(fullHierarchy[hierarchySize - 2].gameObject); startPositions.Add(fullHierarchy[hierarchySize - 2].localPosition); endPositions.Add(fullHierarchy[hierarchySize - 2].localPosition); startRotations.Add(fullHierarchy[hierarchySize - 2].localRotation); endRotations.Add(fullHierarchy[hierarchySize - 2].localRotation); startScales.Add(fullHierarchy[hierarchySize - 2].localScale); endScales.Add(fullHierarchy[hierarchySize - 2].localScale); } } else { movedObjects = new List <GameObject>(); startPositions = new List <Vector3>(); endPositions = new List <Vector3>(); startRotations = new List <Quaternion>(); endRotations = new List <Quaternion>(); startScales = new List <Vector3>(); endScales = new List <Vector3>(); fullHierarchy.ForEach(x => { movedObjects.Add(x.gameObject); startPositions.Add(x.localPosition); endPositions.Add(x.localPosition); startRotations.Add(x.localRotation); endRotations.Add(x.localRotation); startScales.Add(x.localScale); endScales.Add(x.localScale); }); } }