//绘制特效列表
 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();
 }
Exemple #2
0
        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();
                }
            }
        }
Exemple #3
0
        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();
        }