public override void OnInspectorGUI() { serializedObject.Update(); string errors = m_RigImportErrors.stringValue; string warnings = m_RigImportWarnings.stringValue; if (errors.Length > 0) { EditorGUILayout.Space(); EditorGUILayout.HelpBox("Error(s) found while importing rig in this animation file. Open \"Import Messages\" foldout below for more details", MessageType.Error); } else { if (warnings.Length > 0) { EditorGUILayout.Space(); EditorGUILayout.HelpBox("Warning(s) found while importing rig in this animation file. Open \"Import Messages\" foldout below for more details", MessageType.Warning); } } // Animation type EditorGUI.BeginChangeCheck(); EditorGUILayout.Popup(m_AnimationType, Styles.AnimationTypeOpt, Styles.AnimationType); if (EditorGUI.EndChangeCheck()) { m_AvatarSource.objectReferenceValue = null; if (m_AvatarSourceSerializedObject != null) { m_AvatarSourceSerializedObject.Dispose(); } m_AvatarSourceSerializedObject = null; if (animationType == ModelImporterAnimationType.Legacy) { m_AnimationCompression.intValue = (int)ModelImporterAnimationCompression.KeyframeReduction; } else if (animationType == ModelImporterAnimationType.Generic || animationType == ModelImporterAnimationType.Human) { m_AnimationCompression.intValue = (int)ModelImporterAnimationCompression.Optimal; } m_DstHasExtraRoot.boolValue = m_SrcHasExtraRoot.boolValue; } EditorGUILayout.Space(); if (!m_AnimationType.hasMultipleDifferentValues) { // Show GUI depending on animation type if (animationType == ModelImporterAnimationType.Human) { HumanoidGUI(); } else if (animationType == ModelImporterAnimationType.Generic) { GenericGUI(); } else if (animationType == ModelImporterAnimationType.Legacy) { LegacyGUI(); } } if (animationType != ModelImporterAnimationType.None || m_AnimationType.hasMultipleDifferentValues) { EditorGUILayout.Popup(m_SkinWeightsMode, Styles.SkinWeightsModeOpt, Styles.SkinWeightsMode); if (m_SkinWeightsMode.intValue == (int)ModelImporterSkinWeights.Custom) { EditorGUILayout.IntSlider(m_MaxBonesPerVertex, 1, 255, Styles.MaxBonesPerVertex); EditorGUILayout.Slider(m_MinBoneWeight, 0.001f, 0.5f, Styles.MinBoneWeight); } int currentSkinWeights = m_SkinWeightsMode.intValue == (int)ModelImporterSkinWeights.Standard ? 4 : m_MaxBonesPerVertex.intValue; if ((int)QualitySettings.skinWeights < currentSkinWeights) { var msg = $"Skin Weights is set to {(int)QualitySettings.skinWeights} bones per vertex in Quality Settings. Some bone influences may not be rendered."; EditorGUILayout.HelpBox(msg, MessageType.Info); } } EditorGUILayout.PropertyField(m_OptimizeBones, Styles.OptimizeBones); ShowUpdateReferenceClip(); // OptimizeGameObject is only supported on our own avatar when animation type is not Legacy. if (m_AvatarSetup.intValue == (int)ModelImporterAvatarSetup.CreateFromThisModel && animationType != ModelImporterAnimationType.Legacy) { EditorGUILayout.PropertyField(m_OptimizeGameObjects); if (m_OptimizeGameObjects.boolValue && serializedObject.targetObjectsCount == 1) // SerializedProperty can't handle multiple string arrays properly. { bool wasChanged = GUI.changed; m_ExtraExposedTransformFoldout = EditorGUILayout.Foldout(m_ExtraExposedTransformFoldout, Styles.ExtraExposedTransform, true); GUI.changed = wasChanged; if (m_ExtraExposedTransformFoldout) { // Do not allow multi edit of exposed transform list if all rigs doesn't match using (new EditorGUI.DisabledScope(!m_CanMultiEditTransformList)) using (new EditorGUI.IndentLevelScope()) m_ExposeTransformEditor.OnGUI(); } } } if (errors.Length > 0 || warnings.Length > 0) { EditorGUILayout.Space(); importMessageFoldout = EditorGUILayout.Foldout(importMessageFoldout, Styles.ImportMessages, true); if (importMessageFoldout) { if (errors.Length > 0) { EditorGUILayout.HelpBox(errors, MessageType.None); } else if (warnings.Length > 0) { EditorGUILayout.HelpBox(warnings, MessageType.None); } } } }
public override void OnInspectorGUI() { if (styles == null) { styles = new Styles(); } string errors = m_RigImportErrors.stringValue; string warnings = m_RigImportWarnings.stringValue; if (errors.Length > 0) { EditorGUILayout.Space(); EditorGUILayout.HelpBox("Error(s) found while importing rig in this animation file. Open \"Import Messages\" foldout below for more details", MessageType.Error); } else { if (warnings.Length > 0) { EditorGUILayout.Space(); EditorGUILayout.HelpBox("Warning(s) found while importing rig in this animation file. Open \"Import Messages\" foldout below for more details", MessageType.Warning); } } // Animation type EditorGUI.BeginChangeCheck(); EditorGUILayout.Popup(m_AnimationType, styles.AnimationTypeOpt, styles.AnimationType); if (EditorGUI.EndChangeCheck()) { m_AvatarSource.objectReferenceValue = null; if (animationType == ModelImporterAnimationType.Legacy) { m_AnimationCompression.intValue = (int)ModelImporterAnimationCompression.KeyframeReduction; } else if (animationType == ModelImporterAnimationType.Generic || animationType == ModelImporterAnimationType.Human) { m_AnimationCompression.intValue = (int)ModelImporterAnimationCompression.Optimal; } m_DstHasExtraRoot.boolValue = m_SrcHasExtraRoot.boolValue; } EditorGUILayout.Space(); if (!m_AnimationType.hasMultipleDifferentValues) { // Show GUI depending on animation type if (animationType == ModelImporterAnimationType.Human) { HumanoidGUI(); } else if (animationType == ModelImporterAnimationType.Generic) { GenericGUI(); } else if (animationType == ModelImporterAnimationType.Legacy) { LegacyGUI(); } } ShowUpdateReferenceClip(); bool canOptimizeGameObjects = true; if (animationType != ModelImporterAnimationType.Human && animationType != ModelImporterAnimationType.Generic) { canOptimizeGameObjects = false; } if (m_CopyAvatar.boolValue == true) { // If you have already created an Avatar for another model with a rig identical to this one, you can copy its Avatar definition. // With this option, this model will not create any avatar but only import animations. canOptimizeGameObjects = false; } if (canOptimizeGameObjects) { EditorGUILayout.PropertyField(m_OptimizeGameObjects); if (m_OptimizeGameObjects.boolValue && serializedObject.targetObjects.Length == 1) // SerializedProperty can't handle multiple string arrays properly. { EditorGUILayout.Space(); // Do not allow multi edit of exposed transform list if all rigs doesn't match using (new EditorGUI.DisabledScope(!m_CanMultiEditTransformList)) { m_ExposeTransformEditor.OnGUI(); } } } if (errors.Length > 0 || warnings.Length > 0) { EditorGUILayout.Space(); importMessageFoldout = EditorGUILayout.Foldout(importMessageFoldout, styles.ImportMessages, true); if (importMessageFoldout) { if (errors.Length > 0) { EditorGUILayout.HelpBox(errors, MessageType.None); } else if (warnings.Length > 0) { EditorGUILayout.HelpBox(warnings, MessageType.None); } } } }