Example #1
0
 private void OnGUI()
 {
     EditorGUILayout.BeginVertical();
     EditorGUILayout.LabelField("输入技能id数字或id名称搜索");
     id     = EditorGUILayout.IntField("id数字:", id);
     idName = EditorGUILayout.TextField("id名称:", idName);
     if (GUILayout.Button("id数字搜索并应用", GUILayout.Height(40)))
     {
         if (id > 0 && EditorDataContainer.allSkillUnits.units.Count > id)
         {
             idName = EditorDataContainer.GetSkillStringById(id);
             DataConvert.ConvertSkillUnit(EditorDataContainer.currentskillAssetData.skillUnit, EditorDataContainer.allSkillUnits.units[id]);
             int curart = EditorDataContainer.currentskillAssetData.skillUnit.artId;
             SkillUnit.SkillArt oart = EditorDataContainer.allSkillUnits.arts[curart];
             DataConvert.ConvertSkillArt(EditorDataContainer.currentskillAssetData.skillArt, oart);
             EditorDataContainer.UseSkillArt(oart);
         }
     }
     if (GUILayout.Button("id名字搜索并应用", GUILayout.Height(40)))
     {
         id = EditorDataContainer.GetSkillIdByString(idName);
         if (id > 0 && EditorDataContainer.allSkillUnits.units.Count > id)
         {
             DataConvert.ConvertSkillUnit(EditorDataContainer.currentskillAssetData.skillUnit, EditorDataContainer.allSkillUnits.units[id]);
             int curart = EditorDataContainer.currentskillAssetData.skillUnit.artId;
             SkillUnit.SkillArt oart = EditorDataContainer.allSkillUnits.arts[curart];
             DataConvert.ConvertSkillArt(EditorDataContainer.currentskillAssetData.skillArt, oart);
             EditorDataContainer.UseSkillArt(oart);
         }
     }
     if (GUILayout.Button("Close", GUILayout.Height(40)))
     {
         Close();
     }
     EditorGUILayout.EndVertical();
 }
Example #2
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();
        }
        //生成序列
        public static JSequencer GenerateSequence(SkillAssetData skillart)
        {
            //id 名称
            string SkillId = EditorDataContainer.GetSkillStringById(skillart.skillArt.id);
            //模型名称
            string ModelName = skillart.skillArt.modelName;
            //起始动作
            string guideAction = skillart.skillArt.guideAction;
            //持续动作
            string guidingAction = skillart.skillArt.guidingAction;
            //结束动作
            string endAction = skillart.skillArt.endAction;
            //animator名称
            string animatorName = skillart.skillArt.animationController;
            RuntimeAnimatorController animationControllerObj = skillart.skillArt.animationControllerObj;
            //模型类型 主角  NPC
            ModelTargetType modelType = skillart.skillArt.modelType;
            //技能列表
            List <SkillEffectUnit> beginEffect = skillart.skillArt.beginEffect;
            //技能列表
            List <SkillEffectUnit> unitEffect = skillart.skillArt.unitEffect;
            //技能列表
            List <SkillEffectUnit> tipEffect = skillart.skillArt.tipEffect;
            //技能列表
            List <SkillEffectUnit> hitEffect = skillart.skillArt.hitEffect;

            GameObject ShowRoot = new GameObject("ShowRoot_" + SkillId);
            //获取模型 实例化
            GameObject PlayerModel = AssetUtility.GetFBXAsset(modelType, ModelName);
            GameObject Player      = null;

            if (PlayerModel != null)
            {
                Player                  = UnityEngine.Object.Instantiate(PlayerModel) as GameObject;
                Player.name             = ModelName;
                Player.transform.parent = ShowRoot.transform;
            }
            else
            {
                Player = new GameObject(ModelName);
                Player.transform.parent = ShowRoot.transform;
            }
            //获取animator 赋值
            RuntimeAnimatorController controll = animationControllerObj;// AssetUtility.GetAnimationCtl(modelType, ModelName, animatorName);

            if (controll != null)
            {
                if (Player.GetComponent <Animator>() == null)
                {
                    Player.AddComponent <Animator>();
                }
                Player.GetComponent <Animator>().runtimeAnimatorController = controll;
            }

            //新建队列
            GameObject newSequence = new GameObject("Sequence_" + ModelName);
            JSequencer sequence    = newSequence.AddComponent <JSequencer>();

            JTimelineContainer ccontainer = sequence.CreateNewTimelineContainer(Player.transform);

            JTimelineEffect effectline = (JTimelineEffect)ccontainer.AddNewTimeline(TimeLineType.Effect);

            if (guideAction != "-1")
            {
                JEffectTrack track = effectline.AddNewTrack();
                track.name = SkillNames.EffectNames[(int)SkillNames.Effect.GuideAction];
                JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                clip.effectType       = EffectType.Animation;
                clip.TargetObject     = effectline.AffectedObject.gameObject;
                clip.animController   = controll;
                clip.StateName        = guideAction;
                clip.PlaybackDuration = MecanimAnimationUtility.GetStateDurationWithAnimatorController(guideAction, controll);
                clip.StartTime        = 0;
                track.AddClip(clip);
            }
            if (guidingAction != "-1")
            {
                JEffectTrack track = effectline.AddNewTrack();
                track.name = SkillNames.EffectNames[(int)SkillNames.Effect.GuidingAction];
                JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                clip.effectType       = EffectType.Animation;
                clip.TargetObject     = effectline.AffectedObject.gameObject;
                clip.animController   = controll;
                clip.StateName        = guidingAction;
                clip.PlaybackDuration = MecanimAnimationUtility.GetStateDurationWithAnimatorController(guidingAction, controll);
                float t = guidingAction == "-1" ? 0 : MecanimAnimationUtility.GetStateDurationWithAnimatorController(guideAction, controll);
                clip.StartTime = t;
                track.AddClip(clip);
            }
            if (endAction != "-1")
            {
                JEffectTrack track = effectline.AddNewTrack();
                track.name = SkillNames.EffectNames[(int)SkillNames.Effect.EndAction];
                float           t1   = guideAction == "-1" ? 0 : MecanimAnimationUtility.GetStateDurationWithAnimatorController(guideAction, controll);
                float           t    = guidingAction == "-1" ? 0 : MecanimAnimationUtility.GetStateDurationWithAnimatorController(guidingAction, controll);
                JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                clip.effectType       = EffectType.Animation;
                clip.TargetObject     = effectline.AffectedObject.gameObject;
                clip.animController   = controll;
                clip.StateName        = endAction;
                clip.PlaybackDuration = MecanimAnimationUtility.GetStateDurationWithAnimatorController(endAction, controll);
                clip.StartTime        = t1 + t;
                track.AddClip(clip);
            }

            if (beginEffect != null)
            {
                //一个特效 一条轨道
                foreach (SkillEffectUnit effect in beginEffect)
                {
                    //特效名称
                    JEffectTrack track = effectline.AddNewTrack();
                    int          index = beginEffect.IndexOf(effect);
                    if (index > 2)
                    {
                        index = 2;
                    }
                    track.name = SkillNames.EffectNames[(int)SkillNames.Effect.BeginEffect0 + index];
                    JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                    clip.effectType       = EffectType.Particle;
                    clip.effectunit       = effect.Copy();
                    clip.TargetObject     = effectline.AffectedObject.gameObject;
                    clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f;
                    clip.StartTime        = (float)effect.artEffect.beginTime / 1000.0f;
                    track.AddClip(clip);
                }
            }
            if (unitEffect != null)
            {
                //一个特效 一条轨道
                foreach (SkillEffectUnit effect in unitEffect)
                {
                    //特效名称
                    JEffectTrack track = effectline.AddNewTrack();
                    track.name = SkillNames.EffectNames[(int)SkillNames.Effect.UnitEffect];
                    JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                    clip.effectType       = EffectType.Trajectory;
                    clip.effectunit       = effect.Copy();
                    clip.skillunit        = skillart.skillUnit.Copy();
                    clip.TargetObject     = effectline.AffectedObject.gameObject;
                    clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f;
                    clip.StartTime        = (float)effect.artEffect.beginTime / 1000.0f;
                    track.AddClip(clip);
                }
            }
            if (tipEffect != null)
            {
                //一个特效 一条轨道
                foreach (SkillEffectUnit effect in tipEffect)
                {
                    //特效名称
                    JEffectTrack track = effectline.AddNewTrack();
                    track.name = SkillNames.EffectNames[(int)SkillNames.Effect.TipEffect];
                    JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                    clip.effectType       = EffectType.Particle;
                    clip.effectunit       = effect.Copy();
                    clip.TargetObject     = effectline.AffectedObject.gameObject;
                    clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f;
                    clip.StartTime        = (float)effect.artEffect.beginTime / 1000.0f;
                    track.AddClip(clip);
                }
            }
            if (hitEffect != null)
            {
                //一个特效 一条轨道
                foreach (SkillEffectUnit effect in hitEffect)
                {
                    //特效名称
                    JEffectTrack track = effectline.AddNewTrack();
                    track.name = SkillNames.EffectNames[(int)SkillNames.Effect.HitEffect];
                    JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                    clip.effectType       = EffectType.Particle;
                    clip.effectunit       = effect.Copy();
                    clip.TargetObject     = effectline.AffectedObject.gameObject;
                    clip.PlaybackDuration = (float)effect.artEffect.phaseTime / 1000.0f;
                    clip.StartTime        = (float)effect.artEffect.beginTime / 1000.0f;
                    track.AddClip(clip);
                    //    track.AddClip(effectName, (float)effect.artEffect.beginTime / 1000.0f, (float)effect.artEffect.phaseTime / 1000.0f, effectPrefab, effect.configure);
                }
            }
            if (skillart.skillArt.beginCameraAction != null)
            {
                //一个特效 一条轨道
                foreach (SkillCameraAction effect in skillart.skillArt.beginCameraAction)
                {
                    JEffectTrack track = effectline.AddNewTrack();
                    track.name = SkillNames.EffectNames[(int)SkillNames.Effect.BeginCameraAction];
                    JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                    clip.effectType       = EffectType.Camera;
                    clip.cameraAction     = effect.Copy();
                    clip.TargetCamera     = Camera.main;
                    clip.TargetObject     = effectline.AffectedObject.gameObject;
                    clip.PlaybackDuration = (float)effect.phaseTime;
                    clip.StartTime        = (float)effect.delay;
                    track.AddClip(clip);
                }
            }
            if (skillart.skillArt.moveCameraAction != null)
            {
                foreach (SkillCameraAction effect in skillart.skillArt.moveCameraAction)
                {
                    JEffectTrack track = effectline.AddNewTrack();
                    track.name = SkillNames.EffectNames[(int)SkillNames.Effect.MoveCameraAction];
                    JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                    clip.effectType       = EffectType.Camera;
                    clip.cameraAction     = effect.Copy();
                    clip.TargetCamera     = Camera.main;
                    clip.TargetObject     = effectline.AffectedObject.gameObject;
                    clip.PlaybackDuration = (float)effect.phaseTime;
                    clip.StartTime        = (float)effect.delay;
                    track.AddClip(clip);
                }
            }
            if (skillart.skillArt.hitCameraAction != null)
            {
                foreach (SkillCameraAction effect in skillart.skillArt.hitCameraAction)
                {
                    JEffectTrack track = effectline.AddNewTrack();
                    track.name = SkillNames.EffectNames[(int)SkillNames.Effect.HitCameraAction];
                    JEffectClipData clip = ScriptableObject.CreateInstance <JEffectClipData>();
                    clip.effectType       = EffectType.Camera;
                    clip.cameraAction     = effect.Copy();
                    clip.TargetCamera     = Camera.main;
                    clip.TargetObject     = effectline.AffectedObject.gameObject;
                    clip.PlaybackDuration = (float)effect.phaseTime;
                    clip.StartTime        = (float)effect.delay;
                    track.AddClip(clip);
                }
            }
            return(sequence);
        }
 public static string GetSkillStringById(int id)
 {
     return(EditorDataContainer.GetSkillStringById(id));
 }