private void AvatarMaskSettings(AnimationClipInfoProperties clipInfo) { if (clipInfo == null || !((UnityEngine.Object) this.m_AnimationClipEditor != (UnityEngine.Object)null)) { return; } this.InitMask(clipInfo); int indentLevel = EditorGUI.indentLevel; bool changed = GUI.changed; ModelImporterClipEditor.m_MaskFoldout = EditorGUILayout.Foldout(ModelImporterClipEditor.m_MaskFoldout, ModelImporterClipEditor.styles.Mask); GUI.changed = changed; if (clipInfo.maskType == ClipAnimationMaskType.CreateFromThisModel && !this.m_MaskInspector.IsMaskUpToDate()) { GUILayout.BeginHorizontal(EditorStyles.helpBox, new GUILayoutOption[0]); GUILayout.Label("Mask does not match hierarchy. Animation might not import correctly", EditorStyles.wordWrappedMiniLabel, new GUILayoutOption[0]); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.Space(5f); if (GUILayout.Button("Fix Mask")) { this.SetTransformMaskFromReference(clipInfo); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); } else if (clipInfo.maskType == ClipAnimationMaskType.CopyFromOther && clipInfo.MaskNeedsUpdating()) { GUILayout.BeginHorizontal(EditorStyles.helpBox, new GUILayoutOption[0]); GUILayout.Label("Source Mask has changed since last import. It must be Updated", EditorStyles.wordWrappedMiniLabel, new GUILayoutOption[0]); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.Space(5f); if (GUILayout.Button("Update Mask")) { clipInfo.MaskToClip(clipInfo.maskSource); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); } if (ModelImporterClipEditor.m_MaskFoldout) { ++EditorGUI.indentLevel; this.m_MaskInspector.OnInspectorGUI(); } EditorGUI.indentLevel = indentLevel; }
private void AddClip(TakeInfo takeInfo) { this.m_ClipAnimations.InsertArrayElementAtIndex(this.m_ClipAnimations.arraySize); AnimationClipInfoProperties animationClipInfoAtIndex = this.GetAnimationClipInfoAtIndex(this.m_ClipAnimations.arraySize - 1); animationClipInfoAtIndex.name = this.MakeUniqueClipName(takeInfo.defaultClipName, -1); this.SetupTakeNameAndFrames(animationClipInfoAtIndex, takeInfo); animationClipInfoAtIndex.wrapMode = 0; animationClipInfoAtIndex.loop = false; animationClipInfoAtIndex.orientationOffsetY = 0f; animationClipInfoAtIndex.level = 0f; animationClipInfoAtIndex.cycleOffset = 0f; animationClipInfoAtIndex.loopTime = false; animationClipInfoAtIndex.loopBlend = false; animationClipInfoAtIndex.loopBlendOrientation = false; animationClipInfoAtIndex.loopBlendPositionY = false; animationClipInfoAtIndex.loopBlendPositionXZ = false; animationClipInfoAtIndex.keepOriginalOrientation = false; animationClipInfoAtIndex.keepOriginalPositionY = true; animationClipInfoAtIndex.keepOriginalPositionXZ = false; animationClipInfoAtIndex.heightFromFeet = false; animationClipInfoAtIndex.mirror = false; animationClipInfoAtIndex.maskType = ClipAnimationMaskType.CreateFromThisModel; AvatarMask mask = new AvatarMask(); string[] humanTransforms = null; SerializedObject serializedObject = animationClipInfoAtIndex.maskTypeProperty.serializedObject; ModelImporter targetObject = serializedObject.targetObject as ModelImporter; if ((this.animationType == ModelImporterAnimationType.Human) && !targetObject.isAssetOlderOr42) { humanTransforms = AvatarMaskUtility.GetAvatarHumanTransform(serializedObject, targetObject.transformPaths); if (humanTransforms == null) { return; } } AvatarMaskUtility.UpdateTransformMask(mask, targetObject.transformPaths, humanTransforms); animationClipInfoAtIndex.MaskToClip(mask); animationClipInfoAtIndex.ClearEvents(); animationClipInfoAtIndex.ClearCurves(); UnityEngine.Object.DestroyImmediate(mask); }
//////////////////////////////////////////////////////////////////////////////////////////////////////// /// private void AvatarMaskSettings(AnimationClipInfoProperties clipInfo) { if (clipInfo != null && m_AnimationClipEditor != null) { InitMask(clipInfo); int prevIndent = EditorGUI.indentLevel; // Don't make toggling foldout cause GUI.changed to be true (shouldn't cause undoable action etc.) bool wasChanged = GUI.changed; m_MaskFoldout = EditorGUILayout.Foldout(m_MaskFoldout, styles.Mask, true); GUI.changed = wasChanged; if (clipInfo.maskType == ClipAnimationMaskType.CreateFromThisModel && !m_MaskInspector.IsMaskUpToDate() && !m_MaskInspector.IsMaskEmpty()) { GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label(styles.MaskHasAPath, EditorStyles.wordWrappedMiniLabel); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.Space(5); if (GUILayout.Button(styles.UpdateMask)) { SetTransformMaskFromReference(clipInfo); m_MaskInspector.UpdateTransformInfos(); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); } else if (clipInfo.maskType == ClipAnimationMaskType.CopyFromOther && clipInfo.MaskNeedsUpdating()) { GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label(styles.SourceMaskHasChanged, EditorStyles.wordWrappedMiniLabel); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.Space(5); if (GUILayout.Button(styles.UpdateMask)) { clipInfo.MaskToClip(clipInfo.maskSource); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); } else if (clipInfo.maskType == ClipAnimationMaskType.CopyFromOther && !m_MaskInspector.IsMaskUpToDate()) { GUILayout.BeginHorizontal(EditorStyles.helpBox); GUILayout.Label(styles.SourceMaskHasAPath, EditorStyles.wordWrappedMiniLabel); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.Space(5); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } if (m_MaskFoldout) { EditorGUI.indentLevel++; m_MaskInspector.OnInspectorGUI(); } EditorGUI.indentLevel = prevIndent; } }
private void AvatarMaskSettings(AnimationClipInfoProperties clipInfo) { if (clipInfo == null || !((UnityEngine.Object) this.m_AnimationClipEditor != (UnityEngine.Object) null)) return; this.InitMask(clipInfo); int indentLevel = EditorGUI.indentLevel; bool changed = GUI.changed; ModelImporterClipEditor.m_MaskFoldout = EditorGUILayout.Foldout(ModelImporterClipEditor.m_MaskFoldout, ModelImporterClipEditor.styles.Mask); GUI.changed = changed; if (clipInfo.maskType == ClipAnimationMaskType.CreateFromThisModel && !this.m_MaskInspector.IsMaskUpToDate()) { GUILayout.BeginHorizontal(EditorStyles.helpBox, new GUILayoutOption[0]); GUILayout.Label("Mask does not match hierarchy. Animation might not import correctly", EditorStyles.wordWrappedMiniLabel, new GUILayoutOption[0]); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.Space(5f); if (GUILayout.Button("Fix Mask")) this.SetTransformMaskFromReference(clipInfo); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } else if (clipInfo.maskType == ClipAnimationMaskType.CopyFromOther && clipInfo.MaskNeedsUpdating()) { GUILayout.BeginHorizontal(EditorStyles.helpBox, new GUILayoutOption[0]); GUILayout.Label("Source Mask has changed since last import. It must be Updated", EditorStyles.wordWrappedMiniLabel, new GUILayoutOption[0]); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.Space(5f); if (GUILayout.Button("Update Mask")) clipInfo.MaskToClip(clipInfo.maskSource); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } if (ModelImporterClipEditor.m_MaskFoldout) { ++EditorGUI.indentLevel; this.m_MaskInspector.OnInspectorGUI(); } EditorGUI.indentLevel = indentLevel; }