private bool InitializeSetNames()
        {
            var asset = m_prop_controlMap.objectReferenceValue as BlendShapeControlMapAsset;

            if (m_currentAsset != asset)
            {
                m_setNames = null != asset?
                             asset.ControlSets.Select(c => c.Name).ToArray() :
                                 null;

                m_currentAsset = asset;
            }

            return(m_setNames != null);
        }
        public BlendShapeRuntimeControl(GameObject rootObject, BlendShapeControlMapAsset asset, bool ensureMeshNameMatch = true)
        {
            var renderers = rootObject.GetComponentsInChildren <SkinnedMeshRenderer>();

            var controlAxisList = asset.ControlSets;

            m_set = new RuntimeControlSet[controlAxisList.Count];

            for (var i = 0; i < m_set.Length; ++i)
            {
                var src = controlAxisList[i];

                m_set[i] = new RuntimeControlSet
                {
                    axisValue = 0f,
                    controls  = new RuntimeControl[src.Controls.Count]
                };
                var controls = m_set[i].controls;

                for (var j = 0; j < controls.Length; j++)
                {
                    var r      = FindMeshRenderer(renderers, src.Controls[j], ensureMeshNameMatch);
                    var index  = r == null ? -1 : r.sharedMesh.GetBlendShapeIndex(src.Controls[j].BlendShapeName);
                    var curVal = 0f;
                    if (index < 0)
                    {
                        Debug.LogErrorFormat("Binding Failed: BlendShape '{0}' not found from {1}.",
                                             src.Controls[j].BlendShapeName, rootObject.name);
                    }
                    else
                    {
                        curVal = r.GetBlendShapeWeight(index);
                    }

                    controls[j] = new RuntimeControl
                    {
                        renderer        = r,
                        blendShapeIndex = index,
                        currentValue    = curVal,
                        range           = src.Controls[j].Range,
                        defaultValue    = src.Controls[j].DefaultValue
                    };
                }
            }
        }
//		private class Styles
//		{
//			public EditorGUILayout.VerticalScope boxVScope = new EditorGUILayout.VerticalScope(GUI.skin.box);
//			public EditorGUILayout.HorizontalScope hScope = new EditorGUILayout.HorizontalScope();
//		}
//
//		private static Styles s_styles;

        private void ResetEditor(BlendShapeControlMapAsset asset)
        {
            m_currentTarget    = asset;
            m_prop_targetModel = serializedObject.FindProperty("m_targetModel");

            if (m_prop_targetModel.objectReferenceValue != null)
            {
                var targetModel = m_prop_targetModel.objectReferenceValue as GameObject;
                var renderers   = targetModel.GetComponentsInChildren <SkinnedMeshRenderer>();
                m_meshNames = renderers.Where(r => r.sharedMesh.blendShapeCount > 0).Select(r => r.sharedMesh.name)
                              .ToArray();
                m_blendShapeNames = new List <string[]>();
                foreach (var r in renderers.Where(r => r.sharedMesh.blendShapeCount > 0))
                {
                    var names = new List <string>();
                    for (var i = 0; i < r.sharedMesh.blendShapeCount; ++i)
                    {
                        names.Add(r.sharedMesh.GetBlendShapeName(i));
                    }

                    m_blendShapeNames.Add(names.ToArray());
                }
            }
            else
            {
                m_meshNames       = null;
                m_blendShapeNames = null;
            }

            m_foldouts = new List <bool>();
            if (asset.ControlSets != null)
            {
                foreach (var s in asset.ControlSets)
                {
                    m_foldouts.Add(false);
                }
            }
        }