Beispiel #1
0
    // Use this for initialization
    void Start()
    {
        for (int i = 0; i < _skinMesh.sharedMesh.blendShapeCount; i++)
        {
//			Debug.Log (_skinMesh.sharedMesh.GetBlendShapeName(i));
            GameObject _target = GameObject.Instantiate(_BtnItem, ContentOBJ);
            _target.name = _skinMesh.sharedMesh.GetBlendShapeName(i);

            BlendShapeController _blendShape = _target.GetComponent <BlendShapeController> ();
            _blendShape.BlendShapeName.text  = _target.name.Replace(PastName, "");
            _blendShape.SliderValue.value    = _skinMesh.GetBlendShapeWeight(i);
            _blendShape.BlendShapeValue.text = _blendShape.SliderValue.value.ToString();
            _blendShape.SliderValue.onValueChanged.AddListener(delegate {
                OnBlendShapeValueChange(_target);
            });
        }
        Btn_reset.onClick.AddListener(ResetBlendShape);

        for (int i = 0; i < _toggleType.Length; i++)
        {
            GameObject target = _toggleType [i].gameObject;
//			_toggleType [i].onValueChanged.AddListener (delegate {
//				TypeSelect (target);
//			});
            _toggleType [i].onValueChanged.AddListener(delegate(bool arg0) {
                TypeSelect(target, arg0);
            });
        }

        layoutTransform.sizeDelta = new  Vector2(layoutTransform.sizeDelta.x, 60.0f * ContentOBJ.childCount);
    }
Beispiel #2
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        BlendShapeController blendShapeController = (BlendShapeController)target;

        Mesh blendMesh       = blendShapeController.skinnedMeshRenderer.sharedMesh;
        int  blendShapeCount = blendMesh.blendShapeCount;

        for (int i = 0; i < blendShapeCount; i++)
        {
            float currentBlendWeight = blendShapeController.skinnedMeshRenderer.GetBlendShapeWeight(i);
            float setBlendWeight     = EditorGUILayout.Slider(blendMesh.GetBlendShapeName(i), currentBlendWeight, 0f, 100f);
            blendShapeController.skinnedMeshRenderer.SetBlendShapeWeight(i, setBlendWeight);
        }
    }
Beispiel #3
0
    // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        BlendShapeController trackBinding = playerData as BlendShapeController;

        if (!trackBinding)
        {
            return;
        }

        var inputCount = playable.GetInputCount();

        var blendValue01 = 0f;
        var blendValue02 = 0f;
        var blendValue03 = 0f;
        var blendValue04 = 0f;
        var blendValue05 = 0f;
        var blendValue06 = 0f;
        var blendValue07 = 0f;
        var blendValue08 = 0f;

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <BlendShapeControllerPlayableBehaviour> inputPlayable = (ScriptPlayable <BlendShapeControllerPlayableBehaviour>)playable.GetInput(i);
            BlendShapeControllerPlayableBehaviour input = inputPlayable.GetBehaviour();

            // Use the above variables to process each frame of this playable.

            blendValue01 += inputWeight * input.bindValue01;
            blendValue02 += inputWeight * input.bindValue02;
            blendValue03 += inputWeight * input.bindValue03;
            blendValue04 += inputWeight * input.bindValue04;
            blendValue05 += inputWeight * input.bindValue05;
            blendValue06 += inputWeight * input.bindValue06;
            blendValue07 += inputWeight * input.bindValue07;
            blendValue08 += inputWeight * input.bindValue08;
        }

        trackBinding.Value01 = blendValue01;
        trackBinding.Value02 = blendValue02;
        trackBinding.Value03 = blendValue03;
        trackBinding.Value04 = blendValue04;
        trackBinding.Value05 = blendValue05;
        trackBinding.Value06 = blendValue06;
        trackBinding.Value07 = blendValue07;
        trackBinding.Value08 = blendValue08;
    }
    public override void OnInspectorGUI()
    {
        GUILayout.BeginVertical("", EditorStyles.helpBox);
        GUILayout.BeginHorizontal("box");
        GUILayout.Label("Blend Shapes", EditorStyles.boldLabel);
        SerializedObject     so = base.serializedObject;
        BlendShapeController blendShapeControl = (BlendShapeController)target;

        so.UpdateIfRequiredOrScript();
        var BSTArray       = so.FindProperty("blendShapeTargets");
        int BSTArrayLength = BSTArray.arraySize;

        if (GUILayout.Button("Reload BlendShape Targets", GUILayout.Width(200)))
        {
            blendShapeControl.ReloadBlendShapeTargets();
        }
        GUILayout.EndHorizontal();
        if (BSTArray != null && BSTArrayLength > 0)
        {
            for (int i = 0; i < BSTArrayLength; i++)
            {
                GUILayout.BeginVertical("Box");
                var target = BSTArray.GetArrayElementAtIndex(i);

                SerializedObject targetprop = new SerializedObject(target.objectReferenceValue);
                targetprop.UpdateIfRequiredOrScript();

                string blendShapeInfo = "Name: " + targetprop.FindProperty("BlendShapeName").stringValue + "   Index: " + targetprop.FindProperty("BlendShapeIndex").intValue.ToString();
                EditorGUILayout.LabelField(blendShapeInfo);
                //  EditorGUILayout.LabelField("Name", targetprop.FindProperty("BlendShapeName").stringValue);
                //    EditorGUILayout.LabelField("BlendShape Index", targetprop.FindProperty("BlendShapeIndex").intValue.ToString());
                GUI.enabled = false;
                EditorGUILayout.PropertyField(targetprop.FindProperty("BlendShapeValue"), true);
                GUI.enabled = true;
                EditorGUILayout.PropertyField(targetprop.FindProperty("BlendShapeDefaultValue"), true);
                targetprop.ApplyModifiedProperties();
                GUILayout.EndVertical();
            }
        }
        GUILayout.EndVertical();
        so.ApplyModifiedProperties();
    }
    public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
    {
        if (_mTrackBinding == null)
        {
            BlendShapeController trackBinding = go.GetComponent <PlayableDirector>().GetGenericBinding(this) as BlendShapeController;
            _mTrackBinding = trackBinding;
        }
        //iterator for all currently existing clips
        IEnumerable <TimelineClip> clips = GetClips();

        //check if track binding has been set
        if (_mTrackBinding != null)
        {
            List <string> clipGuids = new List <string>();
            //check each clip
            foreach (var item in clips)
            {
                //rename clip if not customized by user
                if (item.displayName == "BlendShapeControlClip")
                {
                    item.displayName = _mTrackBinding.transform.root.name + " " + _mTrackBinding.name;
                }

                //get blendShapeControlClip encapulated in TimelineClip
                BlendShapeControlClip blendShapeControlClip = item.asset as BlendShapeControlClip;

                //get BlendShapeControlBehaviour encapulated in BlendShapeControlClip
                BlendShapeControlBehaviour blendShapeControlBehaviour = blendShapeControlClip.template;

                //check just in case there aren't any blendshapes on the attached controller
                if (_mTrackBinding.blendShapeTargets.Length > 0)
                {
                    //update  blendShapeTargets from _mTrackBinding to BlendShapeController
                    clipGuids.Add(blendShapeControlBehaviour.LoadBlendShapeTargets(_mTrackBinding.blendShapeTargets, clipGuids));
                }
                //this is just informational so the inmspector will make it clear what object is being edited
                blendShapeControlBehaviour.name = _mTrackBinding.transform.root.name + " " + _mTrackBinding.name;
            }
        }
        return(ScriptPlayable <BlendShapeControlMixerBehaviour> .Create(graph, inputCount));
    }
    public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
    {
#if UNITY_EDITOR
        //get the track binding for this track, if any
        BlendShapeController trackBinding = director.GetGenericBinding(this) as BlendShapeController;
        _mTrackBinding = trackBinding;
        if (trackBinding == null)
        {
            return;
        }
        var serializedObject = new UnityEditor.SerializedObject(trackBinding);
        var iterator         = serializedObject.GetIterator();
        while (iterator.NextVisible(true))
        {
            if (iterator.hasVisibleChildren)
            {
                continue;
            }
            driver.AddFromName <BlendShapeController>(trackBinding.gameObject, iterator.propertyPath);
        }
#endif
        base.GatherProperties(director, driver);
    }
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        //     Debug.Log(" Mixer ProcessFrame");
        m_TrackBinding = playerData as BlendShapeController;

        if (m_TrackBinding == null)
        {
            return;
        }

        if (!m_FirstFrameHappened)
        {
            m_FirstFrameHappened = true;

            if (m_TrackBinding.blendShapeTargets != null && m_TrackBinding.blendShapeTargets.Length > 0)
            {
                blendShapeDefaults = new float[m_TrackBinding.blendShapeTargets.Length];

                for (int i = 0; i < m_TrackBinding.blendShapeTargets.Length; i++)
                {
                    blendShapeDefaults[i] = m_TrackBinding.blendShapeTargets[i].BlendShapeDefaultValue;
                }
            }
        }

        int inputCount = playable.GetInputCount();

        float[] blendShapeWeights = new float[m_TrackBinding.blendShapeTargets.Length];

        float totalWeight    = 0f;
        float greatestWeight = 0f;
        int   currentInputs  = 0;

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <BlendShapeControlBehaviour> inputPlayable = (ScriptPlayable <BlendShapeControlBehaviour>)playable.GetInput(i);
            BlendShapeControlBehaviour input = inputPlayable.GetBehaviour();


            if (blendShapeWeights.Length > 0 && input.blendShapeKeys != null && input.blendShapeKeys.Length == blendShapeWeights.Length)
            {
                for (int j = 0; j < blendShapeWeights.Length; j++)
                {
                    blendShapeWeights[j] += input.blendShapeKeys[j].BlendShapeValue * inputWeight;
                }
            }
            totalWeight += inputWeight;

            if (inputWeight > greatestWeight)
            {
                greatestWeight = inputWeight;
            }

            if (!Mathf.Approximately(inputWeight, 0f))
            {
                currentInputs++;
            }
        }
        float remainingweight = 1 - totalWeight;

        for (int i = 0; i < blendShapeWeights.Length; i++)
        {
            blendShapeWeights[i] += blendShapeDefaults[i] * remainingweight;
        }

        m_TrackBinding.SetBlendShapeValues(blendShapeWeights);
    }