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(); }
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)); }