private SkinnedMeshRenderer GetClipBoundSkinnedMeshRenderer()
                {
                    PlayableDirector           selectedDirector = TimelineEditor.inspectedDirector;
                    SkinnedMeshBlendshapeTrack track            = base.target as SkinnedMeshBlendshapeTrack;

                    if (selectedDirector != null && track != null)
                    {
                        ParentBindingTrack parentTrack = track.parent as ParentBindingTrack;

                        if (parentTrack != null)
                        {
                            Object binding = parentTrack.GetEditorBinding(selectedDirector);

                            if (binding is GameObject)
                            {
                                return(SkinnedMeshBlendshapeTrack.GetSkinnedMeshFromGameObject((GameObject)binding));
                            }
                            else if (binding is Transform)
                            {
                                return(SkinnedMeshBlendshapeTrack.GetSkinnedMeshFromGameObject(((Transform)binding).gameObject));
                            }
                        }
                        else
                        {
                            return(selectedDirector.GetGenericBinding(track) as SkinnedMeshRenderer);
                        }
                    }

                    return(null);
                }
                public override void OnInspectorGUI()
                {
                    SkinnedMeshBlendshapeTrack track = base.target as SkinnedMeshBlendshapeTrack;
                    SkinnedMeshRenderer        skinnedMeshRenderer = GetClipBoundSkinnedMeshRenderer();

                    if (skinnedMeshRenderer != null && skinnedMeshRenderer.sharedMesh != null)
                    {
                        string[] blendShapes = new string[skinnedMeshRenderer.sharedMesh.blendShapeCount];
                        int      index       = Mathf.Min(track._blendShapeIndex, skinnedMeshRenderer.sharedMesh.blendShapeCount);

                        for (int i = 0; i < skinnedMeshRenderer.sharedMesh.blendShapeCount; i++)
                        {
                            blendShapes[i] = skinnedMeshRenderer.sharedMesh.GetBlendShapeName(i);
                        }

                        if (skinnedMeshRenderer.sharedMesh.blendShapeCount > 0)
                        {
                            index = EditorGUILayout.Popup(kParameterLabel, index, blendShapes);
                            track._blendShapeIndex = index;
                        }
                        else
                        {
                            GUI.enabled = false;
                            EditorGUILayout.TextField(kNoParametersLabel);
                            GUI.enabled = true;
                        }
                    }
                    else
                    {
                        GUI.enabled = false;
                        EditorGUILayout.TextField(kParameterLabel, track._blendShapeIndex.ToString());
                        GUI.enabled = true;
                    }
                }
Esempio n. 3
0
 public void SetParentBinding(object playerData)
 {
     if (playerData is GameObject)
     {
         _trackBinding  = SkinnedMeshBlendshapeTrack.GetSkinnedMeshFromGameObject((GameObject)playerData);
         _parentBinding = true;
     }
     else if (playerData is Transform)
     {
         _trackBinding  = SkinnedMeshBlendshapeTrack.GetSkinnedMeshFromGameObject(((Transform)playerData).gameObject);
         _parentBinding = true;
     }
     else
     {
         _parentBinding = false;
     }
 }
Esempio n. 4
0
            public override void ProcessFrame(Playable playable, FrameData info, object playerData)
            {
                SkinnedMeshBlendshapeTrack track = (SkinnedMeshBlendshapeTrack)_trackAsset;

                if (!_parentBinding)
                {
                    _trackBinding = playerData as SkinnedMeshRenderer;
                }

                if (_trackBinding == null || track._blendShapeIndex >= _trackBinding.sharedMesh.blendShapeCount)
                {
                    return;
                }

                if (_firstFrame)
                {
                    _defaultValue = _trackBinding.GetBlendShapeWeight(track._blendShapeIndex);
                    _firstFrame   = false;
                }

                float weight = _defaultValue;

                int numInputs = playable.GetInputCount();

                for (int i = 0; i < numInputs; i++)
                {
                    float inputWeight = playable.GetInputWeight(i);

                    if (inputWeight > 0.0f)
                    {
                        ScriptPlayable <SkinnedMeshBlendshapePlayableBehaviour> scriptPlayable = (ScriptPlayable <SkinnedMeshBlendshapePlayableBehaviour>)playable.GetInput(i);
                        SkinnedMeshBlendshapePlayableBehaviour inputBehaviour = scriptPlayable.GetBehaviour();

                        weight = Mathf.Lerp(weight, inputBehaviour._weight, inputWeight);
                    }
                }

                _trackBinding.SetBlendShapeWeight(track._blendShapeIndex, weight);
            }