示例#1
0
        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
            };
        }
示例#2
0
        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);
                });
            }
        }