private void OnEnable() { inst = this; var db = target as DragonBonesProxy; comp = db.GetComponent <UnityArmatureComponent>(); if (comp == null || comp.unityData == null) { return; } dataList.Clear(); Dictionary <string, object> dicRoot = (Dictionary <string, object>)MiniJSON.Json.Deserialize(comp.unityData.dragonBonesJSON.text); if (dicRoot.ContainsKey("armature")) { List <object> armatureRoot = (List <object>)dicRoot["armature"]; for (int i = 0; i < armatureRoot.Count; i++) { Dictionary <string, object> armature = (Dictionary <string, object>)armatureRoot[i]; if (armature.ContainsKey("animation")) { List <object> animationRoot = (List <object>)armature["animation"]; foreach (object anim in animationRoot) { Dictionary <string, object> animDic = (Dictionary <string, object>)anim; if (animDic.ContainsKey("frame")) { List <object> frameList = (List <object>)animDic["frame"]; foreach (object frame in frameList) { Dictionary <string, object> frameDic = (Dictionary <string, object>)frame; DBEffData data = new DBEffData(); data.eventDataList = new List <DBEffEvent>(); if (frameDic.ContainsKey("events")) { List <object> eventList = (List <object>)frameDic["events"]; foreach (object evt in eventList) { Dictionary <string, object> evtDic = (Dictionary <string, object>)evt; if ("event_effect" == (string)evtDic["name"]) { data.animationName = (string)animDic["name"]; List <object> strings = (List <object>)evtDic["strings"]; DBEffEvent e = new DBEffEvent() { param = (string)strings[0], frameIndex = int.Parse(frameDic["duration"].ToString()) }; data.eventDataList.Add(e); dataList.Add(data); } } } } } } } } } }
public override void OnInspectorGUI() { if (_IsPrefab()) { return; } serializedObject.Update(); if (_armatureIndex == -1) { _UpdateParameters(); } // DragonBones Data EditorGUILayout.BeginHorizontal(); _armatureComponent.unityData = EditorGUILayout.ObjectField("DragonBones Data", _armatureComponent.unityData, typeof(UnityDragonBonesData), false) as UnityDragonBonesData; var created = false; if (_armatureComponent.unityData != null) { if (_armatureComponent.armature == null) { if (GUILayout.Button("Create")) { created = true; } } else { if (GUILayout.Button("Reload")) { if (EditorUtility.DisplayDialog("DragonBones Alert", "Are you sure you want to reload data", "Yes", "No")) { created = true; } } } } else { //create UnityDragonBonesData by a json data if (GUILayout.Button("JSON")) { PickJsonDataWindow.OpenWindow(_armatureComponent); } } if (created) { //clear cache UnityFactory.factory.Clear(true); ClearUp(); _armatureComponent.animationName = null; if (UnityEditor.ChangeDragonBonesData(_armatureComponent, _armatureComponent.unityData.dragonBonesJSON)) { _UpdateParameters(); } DragonBonesProxyEditor.Refresh(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); if (_armatureComponent.armature != null) { var dragonBonesData = _armatureComponent.armature.armatureData.parent; // Armature if (UnityFactory.factory.GetAllDragonBonesData().ContainsValue(dragonBonesData) && _armatureNames != null) { var armatureIndex = EditorGUILayout.Popup("Armature", _armatureIndex, _armatureNames.ToArray()); if (_armatureIndex != armatureIndex) { _armatureIndex = armatureIndex; var armatureName = _armatureNames[_armatureIndex]; UnityEditor.ChangeArmatureData(_armatureComponent, armatureName, dragonBonesData.name); _UpdateParameters(); _armatureComponent.gameObject.name = armatureName; MarkSceneDirty(); } } // Animation if (_animationNames != null && _animationNames.Count > 0) { EditorGUILayout.BeginHorizontal(); List <string> anims = new List <string>(_animationNames); anims.Insert(0, "<None>"); var animationIndex = EditorGUILayout.Popup("Animation", _animationIndex + 1, anims.ToArray()) - 1; if (animationIndex != _animationIndex) { _animationIndex = animationIndex; if (animationIndex >= 0) { _armatureComponent.animationName = _animationNames[animationIndex]; var animationData = _armatureComponent.animation.animations[_armatureComponent.animationName]; _armatureComponent.animation.Play(_armatureComponent.animationName, _playTimesPro.intValue); _UpdateParameters(); } else { _armatureComponent.animationName = null; _playTimesPro.intValue = 0; _armatureComponent.animation.Stop(); } MarkSceneDirty(); } if (_animationIndex >= 0) { if (_armatureComponent.animation.isPlaying) { if (GUILayout.Button("Stop")) { _armatureComponent.animation.Stop(); } } else { if (GUILayout.Button("Play")) { _armatureComponent.animation.Play(null, _playTimesPro.intValue); } } } EditorGUILayout.EndHorizontal(); //playTimes EditorGUILayout.BeginHorizontal(); var playTimes = _playTimesPro.intValue; EditorGUILayout.PropertyField(_playTimesPro, false); if (playTimes != _playTimesPro.intValue) { if (!string.IsNullOrEmpty(_armatureComponent.animationName)) { _armatureComponent.animation.Reset(); _armatureComponent.animation.Play(_armatureComponent.animationName, _playTimesPro.intValue); } } EditorGUILayout.EndHorizontal(); // TimeScale var timeScale = _timeScalePro.floatValue; EditorGUILayout.PropertyField(_timeScalePro, false); if (timeScale != _timeScalePro.floatValue) { _armatureComponent.animation.timeScale = _timeScalePro.floatValue; } } // EditorGUILayout.Space(); if (!_armatureComponent.isUGUI) { //Sorting Mode _sortingModeIndex = EditorGUILayout.Popup("Sorting Mode", (int)_armatureComponent.sortingMode, _sortingMode); if (_sortingModeIndex != (int)_armatureComponent.sortingMode) { Undo.RecordObject(_armatureComponent, "Sorting Mode"); _armatureComponent.sortingMode = (SortingMode)_sortingModeIndex; // 里面return了,没有赋值成功 if (_armatureComponent.sortingMode != (SortingMode)_sortingModeIndex) { _sortingModeIndex = (int)_armatureComponent.sortingMode; } MarkSceneDirty(); } // Sorting Layer _sortingLayerIndex = EditorGUILayout.Popup("Sorting Layer", _sortingLayerIndex, _sortingLayerNames.ToArray()); if (_sortingLayerNames[_sortingLayerIndex] != _armatureComponent.sortingLayerName) { Undo.RecordObject(_armatureComponent, "Sorting Layer"); _armatureComponent.sortingLayerName = _sortingLayerNames[_sortingLayerIndex]; MarkSceneDirty(); } // Sorting Order var sortingOrder = EditorGUILayout.IntField("Order in Layer", _armatureComponent.sortingOrder); if (sortingOrder != _armatureComponent.sortingOrder) { Undo.RecordObject(_armatureComponent, "Edit Sorting Order"); _armatureComponent.sortingOrder = sortingOrder; MarkSceneDirty(); } // ZSpace EditorGUILayout.BeginHorizontal(); _armatureComponent.zSpace = EditorGUILayout.Slider("Z Space", _armatureComponent.zSpace, 0.0f, 0.5f); EditorGUILayout.EndHorizontal(); } EditorGUILayout.Space(); // Flip EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Flip"); var flipX = _flipXPro.boolValue; var flipY = _flipYPro.boolValue; _flipXPro.boolValue = GUILayout.Toggle(_flipXPro.boolValue, "X", GUILayout.Width(30)); _flipYPro.boolValue = GUILayout.Toggle(_flipYPro.boolValue, "Y", GUILayout.Width(30)); if (flipX != _flipXPro.boolValue || flipY != _flipYPro.boolValue) { _armatureComponent.armature.flipX = _flipXPro.boolValue; _armatureComponent.armature.flipY = _flipYPro.boolValue; MarkSceneDirty(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); } if (_armatureComponent.armature != null && _armatureComponent.armature.parent == null) { if (!Application.isPlaying && !this._armatureComponent.isUGUI) { // var oldValue = this._closeCombineMeshsPro.boolValue; if (!this._closeCombineMeshsPro.boolValue) { this._closeCombineMeshsPro.boolValue = EditorGUILayout.Toggle("CloseCombineMeshs", this._closeCombineMeshsPro.boolValue); if (GUILayout.Button("Show Slots")) { ShowSlotsWindow.OpenWindow(this._armatureComponent); } } if (oldValue != this._closeCombineMeshsPro.boolValue) { if (this._closeCombineMeshsPro.boolValue) { this._armatureComponent.CloseCombineMeshs(); } } } } serializedObject.ApplyModifiedProperties(); if (!EditorApplication.isPlayingOrWillChangePlaymode && Selection.activeObject == _armatureComponent.gameObject) { EditorUtility.SetDirty(_armatureComponent); HandleUtility.Repaint(); } }