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); } } }