public override void OnInspectorGUI() { JTrajectoryClipData clip = (JTrajectoryClipData)target; var serializedProperty = serializedObject.FindProperty("Target"); EditorGUILayout.PropertyField(serializedProperty); var serializedStartTime = serializedObject.FindProperty("startTime"); EditorGUILayout.PropertyField(serializedStartTime); var serializedplaybackDuration = serializedObject.FindProperty("playbackDuration"); EditorGUILayout.PropertyField(serializedplaybackDuration); var serializedlooping = serializedObject.FindProperty("looping"); EditorGUILayout.PropertyField(serializedlooping); EditorDrawUtility.DrawSkillEffectUnit(clip.effectunit); EditorDrawUtility.DrawSkillUnit(clip.skillunit); if (serializedObject.ApplyModifiedProperties()) { JWindow[] windows = Resources.FindObjectsOfTypeAll <JWindow>(); foreach (var window in windows) { window.Repaint(); } } }
public override void OnInspectorGUI() { serializedObject.Update(); var serializedProperty = serializedObject.GetIterator(); serializedProperty.Next(true); while (serializedProperty.NextVisible(true)) { if (serializedProperty.name == "effectDuration") { GUI.enabled = false; EditorGUILayout.PropertyField(serializedProperty); GUI.enabled = true; } else { EditorGUILayout.PropertyField(serializedProperty); } } //if (serializedProperty.name == "effectConfig") { JParticleClipData ss = (JParticleClipData)target; CySkillEditor.EffectConfigure effect = ss.EffectConfig; EditorDrawUtility.DrawEffectConfigure(effect); } var particleTrack = serializedObject.FindProperty("track").objectReferenceValue as JParticleTrack; var targetObject = serializedObject.FindProperty("targetObject").objectReferenceValue; var targetGameObject = targetObject as GameObject; if (!particleTrack) { return; } if (!targetGameObject) { return; } if (serializedObject.ApplyModifiedProperties()) { JWindow[] windows = Resources.FindObjectsOfTypeAll <JWindow>(); foreach (var window in windows) { window.Repaint(); } } }
private void DrawUnitList(float width) { //unit list GUILayout.BeginVertical("Box"); EditorGUILayout.LabelField("SkillUnit List"); List <SkillUnit.SkillUnit> skillinits = EditorDataContainer.allSkillUnits.units; unitScrollPos = EditorGUILayout.BeginScrollView(unitScrollPos); //列表 if (unitList == null) { // 加入数据数组 unitList = new ReorderableList(skillinits, typeof(SkillUnit.SkillUnit), false, false, true, true); } // 绘制Item显示列表 unitList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { SkillUnit.SkillUnit element = skillinits[index]; Rect drawRect = new Rect(rect.x, rect.y + 20, width - 30, 600); GUILayout.BeginArea(drawRect); GUILayout.Label("index: " + index); EditorDrawUtility.DrawSkillUnit(DataConvert.ConvertSkillUnit(element)); GUILayout.EndArea(); EditorGUILayout.Separator(); }; unitList.elementHeight = 600; // 绘制表头 unitList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "SkillUnitList"); }; // 选择回调 unitList.onSelectCallback = (ReorderableList l) => { SelectSkillUnit = l.index; }; unitList.DoLayoutList(); EditorGUILayout.EndScrollView(); GUILayout.EndVertical(); }
//绘制特效列表 public static void DrawCameraActionList(List <SkillCameraAction> beginEffect, Vector2 beginScrollPos, out Vector2 oScrollPos, float width, ref ReorderableList beginEffectList) { EditorGUILayout.BeginVertical(); //起手动作特效 oScrollPos = EditorGUILayout.BeginScrollView(beginScrollPos); if (beginEffectList == null) { // 加入数据数组 beginEffectList = new ReorderableList(beginEffect, typeof(SkillCameraAction), false, false, true, true); } beginEffectList.elementHeight = 280; if (beginEffect == null || beginEffect.Count == 0) { beginEffectList.elementHeight = 20; } // 绘制Item显示列表 beginEffectList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { SkillCameraAction element = (SkillCameraAction)beginEffect[index]; Rect drawRect = new Rect(rect.x, rect.y + 20, width - 30, 280); GUILayout.BeginArea(drawRect); GUILayout.Label("index: " + index); EditorDrawUtility.DrawCameraAction(element); GUILayout.EndArea(); }; beginEffectList.onRemoveCallback = (ReorderableList l) => { l.list.RemoveAt(l.index); }; beginEffectList.onAddCallback = (ReorderableList l) => { l.list.Add(new SkillCameraAction()); }; beginEffectList.DoLayoutList(); EditorGUILayout.EndScrollView(); EditorGUILayout.EndVertical(); }
public override void OnInspectorGUI() { JEffectClipData clip = (JEffectClipData)target; var serializedProperty = serializedObject.FindProperty("effectType"); EditorGUILayout.PropertyField(serializedProperty); var startTime = serializedObject.FindProperty("startTime"); EditorGUILayout.PropertyField(startTime); var playbackDuration = serializedObject.FindProperty("playbackDuration"); EditorGUILayout.PropertyField(playbackDuration); var serializedlooping = serializedObject.FindProperty("looping"); EditorGUILayout.PropertyField(serializedlooping); float starttime = 0.5f; float phasetime = 0.5f; if (clip.effectType == EffectType.Particle || clip.effectType == EffectType.Trajectory) { starttime = clip.effectunit.artEffect.beginTime / 1000f; phasetime = clip.effectunit.artEffect.phaseTime / 1000f; } else if (clip.effectType == EffectType.Camera) { starttime = clip.cameraAction.delay; phasetime = clip.cameraAction.phaseTime; } bool apply = serializedObject.ApplyModifiedProperties(); if (apply) { clip.PlaybackDuration = serializedObject.FindProperty("playbackDuration").floatValue; clip.StartTime = serializedObject.FindProperty("startTime").floatValue; } if (clip.effectType == EffectType.Particle) { EditorDrawUtility.DrawSkillEffectUnit(clip.effectunit); if (clip.effectunit.artEffect.beginTime / 1000f != starttime || clip.effectunit.artEffect.phaseTime / 1000f != phasetime) { clip.PlaybackDuration = (clip.effectunit.artEffect.phaseTime / 1000f); clip.StartTime = (clip.effectunit.artEffect.beginTime / 1000f); apply = true; } } if (clip.effectType == EffectType.Camera) { var TargetCamera = serializedObject.FindProperty("TargetCamera"); EditorGUILayout.PropertyField(TargetCamera); EditorDrawUtility.DrawCameraAction(clip.cameraAction); if (clip.cameraAction.delay != starttime || clip.cameraAction.phaseTime != phasetime) { clip.PlaybackDuration = clip.cameraAction.phaseTime; clip.StartTime = clip.cameraAction.delay; apply = true; } } if (clip.effectType == EffectType.Trajectory) { var Target = serializedObject.FindProperty("Target"); EditorGUILayout.PropertyField(Target); var targetObject = serializedObject.FindProperty("targetObject"); EditorGUILayout.PropertyField(targetObject); EditorDrawUtility.DrawSkillEffectUnit(clip.effectunit); EditorDrawUtility.DrawSkillUnit(clip.skillunit); if (clip.effectunit.artEffect.beginTime / 1000f != starttime || clip.effectunit.artEffect.phaseTime / 1000f != phasetime) { clip.PlaybackDuration = clip.effectunit.artEffect.phaseTime / 1000f; clip.StartTime = clip.effectunit.artEffect.beginTime / 1000f; apply = true; } } if (clip.effectType == EffectType.Sound) { var sound = serializedObject.FindProperty("sound"); EditorGUILayout.PropertyField(sound); if ((AudioClip)sound.objectReferenceValue != null) { EditorGUILayout.FloatField("Duration", ((AudioClip)sound.objectReferenceValue).length); } var targetObject = serializedObject.FindProperty("targetObject"); EditorGUILayout.PropertyField(targetObject); if (serializedObject.ApplyModifiedProperties()) { serializedObject.ApplyModifiedProperties(); serializedObject.FindProperty("playbackDuration").floatValue = ((AudioClip)sound.objectReferenceValue).length; apply = true; } } if (clip.effectType == EffectType.Animation) { var targetObject = serializedObject.FindProperty("targetObject"); var animController = serializedObject.FindProperty("animController"); var stateNameProperty = serializedObject.FindProperty("stateName"); var layer = serializedObject.FindProperty("layer"); GameObject targetObj = (GameObject)targetObject.objectReferenceValue; apply = EditorGUILayout.PropertyField(targetObject); RuntimeAnimatorController anim0 = (RuntimeAnimatorController)animController.objectReferenceValue; Animator anim = targetObj.GetComponent <Animator>(); if (anim != null) { if (anim0 != null) { anim.runtimeAnimatorController = anim0; } if (anim0 == null && anim.runtimeAnimatorController != null) { animController.objectReferenceValue = anim.runtimeAnimatorController; } apply = true; } EditorGUILayout.PropertyField(animController); var availableLayerNames = MecanimAnimationUtility.GetAllLayerNames(targetObj); var olayer = EditorGUILayout.Popup("Layer", layer.intValue, availableLayerNames.ToArray()); if (olayer != layer.intValue) { layer.intValue = olayer; } var availableStateNames = MecanimAnimationUtility.GetAllStateNames(targetObj, layer.intValue); var existingState = -1; var existingStateName = stateNameProperty.stringValue; if (availableStateNames.Contains(existingStateName)) { existingState = availableStateNames.IndexOf(existingStateName); } var newState = EditorGUILayout.Popup("StateName", existingState, availableStateNames.ToArray()); if (newState != existingState) { stateNameProperty.stringValue = availableStateNames[newState]; float duration = MecanimAnimationUtility.GetStateDurationWithAnimatorController(stateNameProperty.stringValue, (RuntimeAnimatorController)animController.objectReferenceValue); clip.PlaybackDuration = duration; serializedObject.FindProperty("playbackDuration").floatValue = duration; apply = true; } } if (apply) { JWindow[] windows = Resources.FindObjectsOfTypeAll <JWindow>(); foreach (var window in windows) { window.Repaint(); } } }
private void OnGUI() { LoadFbx(); LoadEffect(); EditorGUILayout.BeginHorizontal(); if (showUnitList) { EditorGUILayout.BeginVertical(); GUILayout.Box("UnitList", USEditorUtility.ContentBackground, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); if (UnityEngine.Event.current.type == EventType.Repaint) { if (unitRect != GUILayoutUtility.GetLastRect()) { unitRect = GUILayoutUtility.GetLastRect(); this.Repaint(); } } EditorGUILayout.EndVertical(); } if (showArtList) { EditorGUILayout.BeginVertical(); GUILayout.Box("ArtList", USEditorUtility.ContentBackground, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); if (UnityEngine.Event.current.type == EventType.Repaint) { if (artRect != GUILayoutUtility.GetLastRect()) { artRect = GUILayoutUtility.GetLastRect(); this.Repaint(); } } EditorGUILayout.EndVertical(); } EditorGUILayout.BeginVertical(); GUILayout.Box("SkillUnit", USEditorUtility.ContentBackground, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); if (UnityEngine.Event.current.type == EventType.Repaint) { if (skillunitRect != GUILayoutUtility.GetLastRect()) { skillunitRect = GUILayoutUtility.GetLastRect(); this.Repaint(); } } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); GUILayout.Box("SkillArt", USEditorUtility.ContentBackground, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); if (UnityEngine.Event.current.type == EventType.Repaint) { if (skillartRect != GUILayoutUtility.GetLastRect()) { skillartRect = GUILayoutUtility.GetLastRect(); this.Repaint(); } } EditorGUILayout.EndVertical(); //EditorGUILayout.BeginVertical(); GUILayout.Box("Buttons", USEditorUtility.ContentBackground, GUILayout.MaxWidth(150), GUILayout.ExpandHeight(true)); if (UnityEngine.Event.current.type == EventType.Repaint) { if (buttonrect != GUILayoutUtility.GetLastRect()) { buttonrect = GUILayoutUtility.GetLastRect(); this.Repaint(); } } // EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); if (showUnitList) { GUILayout.BeginArea(unitRect); DrawUnitList(unitRect.width); GUILayout.EndArea(); } if (showArtList) { GUILayout.BeginArea(artRect); DrawSkillArtList(artRect.width); GUILayout.EndArea(); } GUILayout.BeginArea(skillunitRect); EditorDrawUtility.DrawSkillUnit(EditorDataContainer.currentskillAssetData.skillUnit); GUILayout.EndArea(); GUILayout.BeginArea(skillartRect); DrawSkillArtEffect(EditorDataContainer.currentskillAssetData.skillArt, skillartRect.width); GUILayout.EndArea(); GUILayout.BeginArea(buttonrect); DrawButtons(); GUILayout.EndArea(); }
private void DrawSkillArtList(float width) { GUILayout.BeginVertical("Box"); EditorGUILayout.LabelField("SkillArtEffect List"); LoadFbx(); LoadEffect(); // 设置保存文件名字 List <SkillUnit.SkillArt> skillart = EditorDataContainer.allSkillUnits.arts; artScrollPos = EditorGUILayout.BeginScrollView(artScrollPos); //列表 if (artList == null) { // 加入数据数组 artList = new ReorderableList(skillart, typeof(SkillUnit.SkillArt), false, false, true, true); } // 绘制Item显示列表 artList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { SkillUnit.SkillArt element = skillart[index]; Rect drawRect = new Rect(rect.x, rect.y + 20, width - 30, 1200); GUILayout.BeginArea(drawRect); EditorGUILayout.TextField("Id:" + element.id, EditorDataContainer.GetSkillStringById(element.id)); EditorGUILayout.FloatField("guideFadeTime:", element.guideFadeTime); EditorGUILayout.TextField("guideAction:", element.guideAction); EditorGUILayout.TextField("guidingAction:", element.guidingAction); EditorGUILayout.TextField("endAction:", element.endAction); for (int i = 0; i < element.beginEffect.Count; i++) { if (element.beginEffect[i] != null) { EditorGUILayout.LabelField("beginEffect:" + i); EditorDrawUtility.DrawSkillArtEffect(DataConvert.ConvertSkillArtEffect(element.beginEffect[i]), null, null); } } if (element.unitEffect != null) { EditorGUILayout.LabelField("unitEffect:"); EditorDrawUtility.DrawSkillArtEffect(DataConvert.ConvertSkillArtEffect(element.unitEffect), null, null); } if (element.tipEffect != null) { EditorGUILayout.LabelField("tipEffect:"); EditorDrawUtility.DrawSkillArtEffect(DataConvert.ConvertSkillArtEffect(element.tipEffect), null, null); } if (element.hitEffect != null) { EditorGUILayout.LabelField("hitEffect:"); EditorDrawUtility.DrawSkillArtEffect(DataConvert.ConvertSkillArtEffect(element.hitEffect), null, null); } if (element.beginCameraAction != null) { EditorGUILayout.LabelField("beginCameraAction:"); EditorDrawUtility.DrawCameraAction(DataConvert.ConvertCameraAction(element.beginCameraAction)); } if (element.moveCameraAction != null) { EditorGUILayout.LabelField("moveCameraAction:"); EditorDrawUtility.DrawCameraAction(DataConvert.ConvertCameraAction(element.moveCameraAction)); } if (element.hitCameraAction != null) { EditorGUILayout.LabelField("hitCameraAction:"); EditorDrawUtility.DrawCameraAction(DataConvert.ConvertCameraAction(element.hitCameraAction)); } GUILayout.EndArea(); EditorGUILayout.Separator(); artList.elementHeight = 1200;// 190 + element.beginEffect.Count * 80; }; // 绘制表头 artList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "SkillArtList"); }; // 选择回调 artList.onSelectCallback = (ReorderableList l) => { SelectSkillArt = l.index; }; artList.DoLayoutList(); EditorGUILayout.EndScrollView(); EditorGUILayout.EndVertical(); }
//绘制特效信息 public void DrawSkillArtEffect(SkillArt skillart, float width) { EditorGUILayout.BeginVertical("Box"); EditorGUILayout.LabelField("Skill ArtEffect: 特效"); //id if (skillart.idString == "") { skillart.idString = EditorDrawUtility.GetSkillStringById(skillart.id); } string id = EditorGUILayout.TextField("Id:", skillart.idString); if (id != skillart.idString) { skillart.idString = id; skillart.id = EditorDrawUtility.GetSkillIdByString(id); } //modelType int typeindex = (int)skillart.modelType; int newtypeindex = EditorGUILayout.Popup("ModelTargetType:", typeindex, Enum.GetNames(typeof(ModelTargetType))); if (newtypeindex != typeindex) { skillart.modelType = (ModelTargetType)newtypeindex; allFbx = null; LoadFbx(); } int fbxselet = -1; // GameObject fbx = AssetUtility.GetFBXWithName(EditorDataContainer.currentskillAssetData.modelName); GameObject fbx = EditorDataContainer.currentskillAssetData.skillArt.model; if (fbx != null) { if (fbxNamelist.Contains(fbx.name)) { fbxselet = fbxNamelist.IndexOf(fbx.name); } } LoadAnimationState(false); EditorGUILayout.BeginHorizontal(); GameObject NewFbx = (GameObject)EditorGUILayout.ObjectField("Model:", fbx, typeof(GameObject), true); int newselectfbx = EditorGUILayout.Popup(fbxselet, fbxNamelist.ToArray()); EditorGUILayout.EndHorizontal(); if (newselectfbx != fbxselet) { skillart.model = allFbx[newselectfbx]; skillart.modelName = allFbx[newselectfbx].name; skillart.animationController = allFbx[newselectfbx].name + "_Anim"; LoadAnimationState(); SkillEffectPrefabs = null; LoadEffect(); } else { if (NewFbx == null) { skillart.model = null; skillart.modelName = ""; skillart.animationController = ""; } else if (NewFbx != skillart.model) { skillart.model = NewFbx; skillart.modelName = NewFbx.name; skillart.animationController = NewFbx.name + "_Anim"; LoadAnimationState(); SkillEffectPrefabs = null; LoadEffect(); } } EditorGUILayout.TextField("animationControllerName:", skillart.animationController); RuntimeAnimatorController controller = AssetUtility.GetAnimationCtl(skillart.modelType, skillart.modelName, skillart.animationController); if (skillart.animationControllerObj == null && controller != null) { skillart.animationControllerObj = controller; } RuntimeAnimatorController newcontroller = (RuntimeAnimatorController)EditorGUILayout.ObjectField("AnimatorController:", skillart.animationControllerObj, typeof(RuntimeAnimatorController), true); if (newcontroller != controller) { skillart.animationController = newcontroller.name; skillart.animationControllerObj = newcontroller; LoadAnimationState(); } EditorGUILayout.LabelField("GuideAction 开始动作:"); skillart.guideFadeTime = EditorGUILayout.FloatField(" guideFadeTime:", skillart.guideFadeTime); EditorDrawUtility.DrawActionRect(" guideAction:", skillart.guideAction, out skillart.guideAction, stateNamelist); EditorDrawUtility.DrawActionRect(" guidingAction:", skillart.guidingAction, out skillart.guidingAction, stateNamelist); EditorDrawUtility.DrawActionRect(" endAction:", skillart.endAction, out skillart.endAction, stateNamelist); showBeginEffect = EditorGUILayout.Foldout(showBeginEffect, "beginEffect 起手特效:"); //EditorGUILayout.LabelField("beginEffect 起手特效:"); if (showBeginEffect) { if (skillart.beginEffect != null) { EditorDrawUtility.DrawEffectUnitList(skillart.beginEffect, beginScrollPos, out beginScrollPos, width, ref beginEffectList, effectNamelist, SkillEffectPrefabs); } else { if (GUILayout.Button("Add beginEffectList")) { skillart.beginEffect = new List <SkillEffectUnit>(); } } } showEndEffect = EditorGUILayout.Foldout(showEndEffect, "endEffect 结束特效:"); // EditorGUILayout.LabelField("tipEffect 警告特效:"); if (showEndEffect) { if (skillart.endEffect != null) { EditorDrawUtility.DrawEffectUnitList(skillart.endEffect, endEffectScrollPos, out endEffectScrollPos, width, ref endEffectList, effectNamelist, SkillEffectPrefabs); } else { if (GUILayout.Button("Add endEffectList")) { skillart.endEffect = new List <SkillEffectUnit>(); } } } showUnit = EditorGUILayout.Foldout(showUnit, "unitEffect 弹道特效:"); //EditorGUILayout.LabelField("unitEffect 弹道特效:"); if (showUnit) { if (skillart.unitEffect != null) { EditorDrawUtility.DrawEffectUnitList(skillart.unitEffect, unitEffectScrollPos, out unitEffectScrollPos, width, ref unitEffectList, effectNamelist, SkillEffectPrefabs); } else { if (GUILayout.Button("Add unitEffectList")) { skillart.unitEffect = new List <SkillEffectUnit>(); } } } showTipEffect = EditorGUILayout.Foldout(showTipEffect, "tipEffect 警告特效:"); // EditorGUILayout.LabelField("tipEffect 警告特效:"); if (showTipEffect) { if (skillart.tipEffect != null) { EditorDrawUtility.DrawEffectUnitList(skillart.tipEffect, tipEffectScrollPos, out tipEffectScrollPos, width, ref tipEffectList, effectNamelist, SkillEffectPrefabs); } else { if (GUILayout.Button("Add tipEffectList")) { skillart.tipEffect = new List <SkillEffectUnit>(); } } } showHitEffect = EditorGUILayout.Foldout(showHitEffect, "hitEffect 击中特效:"); // EditorGUILayout.LabelField("tipEffect 警告特效:"); if (showHitEffect) { if (skillart.hitEffect != null) { EditorDrawUtility.DrawEffectUnitList(skillart.hitEffect, hitEffectScrollPos, out hitEffectScrollPos, width, ref hitEffectList, effectNamelist, SkillEffectPrefabs); } else { if (GUILayout.Button("Add hitEffectList")) { skillart.tipEffect = new List <SkillEffectUnit>(); } } } showBeginCamera = EditorGUILayout.Foldout(showBeginCamera, "beginCameraAction 开始相机特效:"); //EditorGUILayout.LabelField("beginCameraAction 开始相机特效:"); if (showBeginCamera) { if (skillart.beginCameraAction != null) { EditorDrawUtility.DrawCameraActionList(skillart.beginCameraAction, beginCameraScrollPos, out beginCameraScrollPos, width, ref beginCameraList); } else { if (GUILayout.Button("Add beginCameraActionList")) { skillart.beginCameraAction = new List <SkillCameraAction>(); } } } showMoveCamera = EditorGUILayout.Foldout(showMoveCamera, "moveCameraAction 移动相机特效:"); if (showMoveCamera) { //EditorGUILayout.LabelField("moveCameraAction 移动相机特效:"); if (skillart.moveCameraAction != null) { EditorDrawUtility.DrawCameraActionList(skillart.moveCameraAction, movingCameraScrollPos, out movingCameraScrollPos, width, ref movingCameraList); } else { if (GUILayout.Button("Add moveCameraActionList")) { skillart.moveCameraAction = new List <SkillCameraAction>(); } } } showHitCamera = EditorGUILayout.Foldout(showHitCamera, "hitCameraAction 命中相机特效:"); if (showHitCamera) { // EditorGUILayout.LabelField("hitCameraAction 命中相机特效:"); if (skillart.hitCameraAction != null) { EditorDrawUtility.DrawCameraActionList(skillart.hitCameraAction, hitCameraScrollPos, out hitCameraScrollPos, width, ref hitCameraList); } else { if (GUILayout.Button("Add hitCameraActionList")) { skillart.hitCameraAction = new List <SkillCameraAction>(); } } } EditorGUILayout.EndVertical(); }