void OnUpdate()
        {
            if (haveValidContext)
            {
                if (activeBoneIndex != editBoneIndex)
                {
                    activeBoneIndex = BAD_INDEX;
                    mirrorBoneIndex = BAD_INDEX;
                    if (editBoneIndex != BAD_INDEX)
                    {
                        int boneHash = targetPose.poses[editBoneIndex].hash;
                        context.activeTransform = context.activeUMA.skeleton.GetBoneTransform(boneHash);
                        if (context.activeTransform != null)
                        {
                            activeBoneIndex = editBoneIndex;
                        }

                        if (context.mirrorTransform != null)
                        {
                            int mirrorHash = UMASkeleton.StringToHash(context.mirrorTransform.name);
                            for (int i = 0; i < targetPose.poses.Length; i++)
                            {
                                if (targetPose.poses[i].hash == mirrorHash)
                                {
                                    mirrorBoneIndex = i;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        context.activeTransform = null;
                    }
                }
                if (!dynamicDNAConverterMode)
                {
                    context.activeUMA.skeleton.ResetAll();
                    if (context.startingPose != null)
                    {
                        context.startingPose.ApplyPose(context.activeUMA.skeleton, context.startingPoseWeight);
                    }

                    if (haveEditTarget)
                    {
                        targetPose.ApplyPose(context.activeUMA.skeleton, 1f);
                    }
                    else
                    {
                        targetPose.ApplyPose(context.activeUMA.skeleton, previewWeight);
                    }
                }
            }
        }
Exemple #2
0
        void Update()
        {
            if (expressionSet == null)
            {
                return;
            }
            if (skeletonRoot == null)
            {
                return;
            }
            if (expressionPlayer == null)
            {
                expressionPlayer = gameObject.GetComponent <ExpressionPlayer>();
                if (expressionPlayer == null)
                {
                    if (Debug.isDebugBuild)
                    {
                        Debug.LogWarning("Couldn't find expression player to preview!");
                    }
                    return;
                }
            }

            if (skeleton == null)
            {
                skeleton = new UMASkeleton(skeletonRoot);
            }

            expressionSet.RestoreBones(skeleton);

            float[] values = expressionPlayer.Values;

            for (int i = 0; i < values.Length; i++)
            {
                float weight = values[i];

                UMABonePose pose = null;
                if (weight > 0)
                {
                    pose = expressionSet.posePairs[i].primary;
                }
                else
                {
                    weight = -weight;
                    pose   = expressionSet.posePairs[i].inverse;
                }
                if (pose == null)
                {
                    continue;
                }

                pose.ApplyPose(skeleton, weight);
            }
        }
        void OnUpdate()
        {
            if (haveValidContext)
            {
                if (activeBoneIndex != editBoneIndex)
                {
                    activeBoneIndex = BAD_INDEX;
                    mirrorBoneIndex = BAD_INDEX;
                    if (editBoneIndex != BAD_INDEX)
                    {
                        int boneHash = targetPose.poses[editBoneIndex].hash;
                        context.activeTransform = context.activeUMA.skeleton.GetBoneTransform(boneHash);
                        if (context.activeTransform != null)
                        {
                            activeBoneIndex = editBoneIndex;
                        }

                        if (context.mirrorTransform != null)
                        {
                            int mirrorHash = UMASkeleton.StringToHash(context.mirrorTransform.name);
                            for (int i = 0; i < targetPose.poses.Length; i++)
                            {
                                if (targetPose.poses[i].hash == mirrorHash)
                                {
                                    mirrorBoneIndex = i;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        context.activeTransform = null;
                    }
                }
                if (!dynamicDNAConverterMode)
                {
                    context.activeUMA.skeleton.ResetAll();
                    if (context.startingPose != null)
                    {
                        context.startingPose.ApplyPose(context.activeUMA.skeleton, context.startingPoseWeight);
                    }

                    if (haveEditTarget)
                    {
                        targetPose.ApplyPose(context.activeUMA.skeleton, 1f);
                    }
                    else
                    {
                        targetPose.ApplyPose(context.activeUMA.skeleton, previewWeight);
                    }
                }
                else
                {
                    //TODO
                    //how do we deal with poses that are not applied? The user will see the character in its current pose and bone positions for that
                    //which makes no sense
                    //also because this will be hooked up to dna, the dna itself might be causing other changes to happen ('overallScale' for example)
                    //So I think the editor for bonePoseConverters, needs to jump in here and ask the user if they want to apply the dna that makes the pose active?
                    //OR
                    //maybe we create a skeleton how it would be IF the pose was applied to it and the user edits those transforms?
                    //If the pose is applied they will see their character change, if its not it might be clearer that is the case
                }
            }
            if (!Application.isPlaying)
            {
                _livePopupEditor = null;
            }
        }
Exemple #4
0
        void LateUpdate()
        {
            if (!initialized)
            {
                return;
            }

            if (umaData == null || umaData.skeleton == null)
            {
                return;
            }

            if (enableSaccades)
            {
                UpdateSaccades();
            }

            if (enableBlinking)
            {
                UpdateBlinking();
            }

            float[]      values      = Values;
            MecanimJoint mecanimMask = MecanimJoint.None;

            if (!overrideMecanimNeck)
            {
                mecanimMask |= MecanimJoint.Neck;
            }
            if (!overrideMecanimHead)
            {
                mecanimMask |= MecanimJoint.Head;
            }
            if (!overrideMecanimJaw)
            {
                mecanimMask |= MecanimJoint.Jaw;
            }
            if (!overrideMecanimEyes)
            {
                mecanimMask |= MecanimJoint.Eye;
            }
            if (overrideMecanimJaw)
            {
                umaData.skeleton.Restore(jawHash);
            }

            for (int i = 0; i < values.Length; i++)
            {
                if ((MecanimAlternate[i] & mecanimMask) != MecanimJoint.None)
                {
                    continue;
                }

                float weight = values[i];
                if (weight == 0f)
                {
                    continue;
                }

                UMABonePose pose = null;
                if (weight > 0)
                {
                    pose = expressionSet.posePairs[i].primary;
                }
                else
                {
                    weight = -weight;
                    pose   = expressionSet.posePairs[i].inverse;
                }

                if ((weight > minWeight) && (pose != null))
                {
                    pose.ApplyPose(umaData.skeleton, weight);
                }
            }
        }
Exemple #5
0
        void LateUpdate()
        {
            if (!processing)
            {
                return;
            }

            if (!initialized)
            {
                return;
            }

            if (umaData == null || umaData.skeleton == null)
            {
                return;
            }

            if (_mainCameraTransform != null && useDisableDistance && (_mainCameraTransform.position - transform.position).sqrMagnitude > (disableDistance * disableDistance))
            {
                return;
            }

            if (enableSaccades)
            {
                UpdateSaccades();
            }

            if (enableBlinking)
            {
                UpdateBlinking();
            }

            float[] values = Values;

            MecanimJoint mecanimMask = MecanimJoint.None;

            if (!overrideMecanimNeck)
            {
                mecanimMask |= MecanimJoint.Neck;
            }
            if (!overrideMecanimHead)
            {
                mecanimMask |= MecanimJoint.Head;
            }
            if (!overrideMecanimJaw)
            {
                mecanimMask |= MecanimJoint.Jaw;
            }
            if (!overrideMecanimEyes)
            {
                mecanimMask |= MecanimJoint.Eye;
            }
            if (!overrideMecanimHands)
            {
                mecanimMask |= MecanimJoint.Hands;
            }

            if (overrideMecanimJaw)
            {
                umaData.skeleton.Restore(jawHash);
            }

            if (LastValues == null || LastValues.Length < values.Length)
            {
                LastValues = new float[44];
                saveValues(values);
            }

            for (int i = 0; i < values.Length; i++)
            {
                if (LastValues[i] != values[i])
                {
                    if (ExpressionChanged != null)
                    {
                        ExpressionChanged.Invoke(umaData, PoseNames[i], values[i]);
                    }
                }

                if ((MecanimAlternate[i] & mecanimMask) != MecanimJoint.None)
                {
                    continue;
                }

                float weight = values[i];
                if (weight == 0f)
                {
                    continue;
                }

                UMABonePose pose = null;
                if (weight > 0)
                {
                    pose = expressionSet.posePairs[i].primary;
                }
                else
                {
                    weight = -weight;
                    pose   = expressionSet.posePairs[i].inverse;
                }

                if ((weight > minWeight) && (pose != null))
                {
                    pose.ApplyPose(umaData.skeleton, weight);
                }
            }
            saveValues(values);
        }