void OnSelected(BlendShapeClip clip) { if (PreviewSceneManager == null) { m_clipEditor = null; } else if (clip != null) { m_clipEditor = new SerializedBlendShapeEditor(clip, PreviewSceneManager); PreviewSceneManager.Bake(new PreviewSceneManager.BakeValue { BlendShapeBindings = clip.Values, MaterialValueBindings = clip.MaterialValues, Weight = 1.0f }); } else { m_clipEditor = null; PreviewSceneManager.Bake(new PreviewSceneManager.BakeValue()); } }
public override void OnInspectorGUI() { serializedObject.Update(); base.OnInspectorGUI(); m_mode = GUILayout.Toolbar(m_mode, MODES); switch (m_mode) { case 0: m_selector.SelectGUI(); if (m_clipEditor != null) { Separator(); var result = m_clipEditor.Draw(); if (result.Changed) { PreviewSceneManager.Bake(new PreviewSceneManager.BakeValue { BlendShapeBindings = result.BlendShapeBindings, MaterialValueBindings = result.MaterialValueBindings, Weight = 1.0f, }); } } break; case 1: m_clipList.DoLayoutList(); break; default: throw new NotImplementedException(); } serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { base.OnInspectorGUI(); // buttons if (m_target.Clips != null) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Select BlendShapeClip", EditorStyles.boldLabel); var array = m_target.Clips .Select(x => x != null ? BlendShapeKey.CreateFrom(x).ToString() : "null" ).ToArray(); var preset = GUILayout.SelectionGrid(m_preset, array, 4); if (preset != m_preset) { CurrentClip = m_target.Clips[preset]; m_preset = preset; } } // Add if (GUILayout.Button("Add BlendShapeClip")) { AddBlendShapeClip(); } if (CurrentClip != null) { // clip EditorGUILayout.Space(); EditorGUILayout.LabelField("CurrentClip", EditorStyles.boldLabel); /*var loadClip = (BlendShapeClip)*/ GUI.enabled = false; EditorGUILayout.ObjectField("Current clip", CurrentClip, typeof(BlendShapeClip), false); GUI.enabled = true; CurrentClip.Preset = (BlendShapePreset)EditorGUILayout.Popup("Preset", (int)CurrentClip.Preset, Presets); GUI.enabled = false; CurrentClip.BlendShapeName = EditorGUILayout.TextField("BlendShapeName", CurrentClip.BlendShapeName); GUI.enabled = true; var key = BlendShapeKey.CreateFrom(CurrentClip); if (m_target.Clips.Where(x => key.Match(x)).Count() > 1) { EditorGUILayout.HelpBox("duplicate clip", MessageType.Error); } EditorGUILayout.Space(); EditorGUILayout.LabelField("BlendShapeValues", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Clear")) { ClearBlendShape(); } if (CurrentClip != null && GUILayout.Button("Apply")) { string maxWeightString; CurrentClip.Values = GetBindings(out maxWeightString); EditorUtility.SetDirty(CurrentClip); } EditorGUILayout.EndHorizontal(); // sliders bool changed = false; int foldIndex = 0; if (PreviewSceneManager != null) { foreach (var item in PreviewSceneManager.EnumRenderItems.Where(x => x.SkinnedMeshRenderer != null)) { var mesh = item.SkinnedMeshRenderer.sharedMesh; if (mesh != null && mesh.blendShapeCount > 0) { //var relativePath = UniGLTF.UnityExtensions.RelativePathFrom(renderer.transform, m_target.transform); //EditorGUILayout.LabelField(m_target.name + "/" + item.Path); if (foldIndex >= m_meshFolds.Count) { m_meshFolds.Add(false); } m_meshFolds[foldIndex] = EditorGUILayout.Foldout(m_meshFolds[foldIndex], item.SkinnedMeshRenderer.name); if (m_meshFolds[foldIndex]) { //EditorGUI.indentLevel += 1; for (int i = 0; i < mesh.blendShapeCount; ++i) { var src = item.SkinnedMeshRenderer.GetBlendShapeWeight(i); var dst = EditorGUILayout.Slider(mesh.GetBlendShapeName(i), src, 0, 100.0f); if (dst != src) { item.SkinnedMeshRenderer.SetBlendShapeWeight(i, dst); changed = true; } } //EditorGUI.indentLevel -= 1; } ++foldIndex; } } if (changed) { PreviewSceneManager.Bake(); } } } }
public override void OnInspectorGUI() { if (PreviewSceneManager == null) { return; } serializedObject.Update(); if (m_serializedEditor == null) { m_serializedEditor = new SerializedBlendShapeEditor(serializedObject, PreviewSceneManager); //m_thumbnailProp = serializedObject.FindProperty("Thumbnail"); m_isBinaryProp = serializedObject.FindProperty("IsBinary"); } int thumbnailSize = 96; EditorGUILayout.BeginHorizontal(); /* * var objectReferenceValue = EditorGUILayout.ObjectField(m_thumbnailProp.objectReferenceValue, typeof(Texture), false, * GUILayout.Width(thumbnailSize), GUILayout.Height(thumbnailSize)); * if (m_thumbnailProp.objectReferenceValue != objectReferenceValue) * { * m_thumbnailProp.objectReferenceValue = objectReferenceValue; * serializedObject.ApplyModifiedProperties(); * } */ var changed = false; EditorGUILayout.BeginVertical(); base.OnInspectorGUI(); EditorGUILayout.LabelField("Preview Weight"); var previewSlider = EditorGUILayout.Slider(m_previewSlider, 0, 1.0f); GUI.enabled = PreviewTexture != null; /* * if (GUILayout.Button("save thumbnail")) * { * //var ext = "jpg"; * var ext = "png"; * var asset = UnityPath.FromAsset(target); * var path = EditorUtility.SaveFilePanel( * "save thumbnail", * asset.Parent.FullPath, * string.Format("{0}.{1}", asset.FileNameWithoutExtension, ext), * ext); * if (!string.IsNullOrEmpty(path)) * { * var thumbnail = SaveResizedImage(PreviewTexture, UnityPath.FromFullpath(path), * BlendShapeClipDrawer.ThumbnailSize); * m_thumbnailProp.objectReferenceValue = thumbnail; * serializedObject.ApplyModifiedProperties(); * } * } */ GUI.enabled = true; EditorGUILayout.EndVertical(); if (m_isBinaryProp.boolValue) { previewSlider = Mathf.Round(previewSlider); } if (previewSlider != m_previewSlider) { m_previewSlider = previewSlider; changed = true; } EditorGUILayout.EndHorizontal(); Separator(); EditorGUILayout.Space(); var result = m_serializedEditor.Draw(); if ((changed || result.Changed) && PreviewSceneManager != null) { PreviewSceneManager.Bake(new PreviewSceneManager.BakeValue { BlendShapeBindings = result.BlendShapeBindings, MaterialValueBindings = result.MaterialValueBindings, Weight = m_previewSlider }); } }