/// <summary> /// 播放技能,默认一段攻击 /// </summary> /// <param name="id"></param> /// <param name="state"></param> public void PlaySkill(int id, int state) { isPlaySkill = true; this.skillState = state; var skill = Skills.SkillList.Find((s) => s.Id == id); if (skill != null) { this.curSkill = skill; var c = aniPlayer.GetClip(curSkill.Blocks[skillState].AniName); aniPlayer.Play(c); } }
/// <summary> /// 播放技能,默认一段攻击 /// </summary> /// <param name="id"></param> /// <param name="block"></param> public void PlaySkill(int id, int block) { isPlaySkill = true; this.CurSkillBlockIndex = block; try { var skill = Skills.SkillList[id]; if (skill != null) { this.curSkill = skill; curSkillBlock = curSkill.Blocks[CurSkillBlockIndex]; var c = aniPlayer.GetClip(curSkillBlock.AniName); aniPlayer.Play(c); } } catch (Exception e) { Debug.LogError(string.Format("技能数据错误: id-{0} block-{1}", id, block)); } }
/// <summary> /// 当前技能block /// </summary> private void OnGUI_DrawSkillBlock() { GUILayout.BeginVertical(GUILayout.Width(300), GUILayout.Height(800)); GUILayout.Label("技能块列表:"); if (curSkillblockList != null) { int count = curSkillblockList.Count; for (int i = 0; i < count; i++) { GUILayout.BeginVertical(); if (curSkillblockIndex == i) { GUI.color = Color.green; } else { GUI.color = Color.white; } var sb = this.curSkillblockList[i]; GUILayout.BeginHorizontal(); if (GUILayout.Button(string.Format("[{0}] -" + sb.AniName, i))) { curSkillblockIndex = i; curAniClip = ani.GetClip(sb.AniName); curSkillblock = sb; curSkillEventList = EditorSkillTool.GetCurFrameEventList(this.curframe, curSkillblock); curSkillEvnetIndex = -1; curSkillEventEditor = null; GUI.FocusControl("RefreshFocus"); } GUI.color = GUI.backgroundColor; if (GUILayout.Button("DEL", GUILayout.Width(35))) { this.curSkillblockList.Remove(sb); count = curSkillblockList.Count; curSkillblockIndex = -1; curSkillblock = null; curSkillEventList = null; curSkillEvnetIndex = -1; curAniClip = null; curSkillEventEditor = null; GUI.FocusControl("RefreshFocus"); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); } } GUILayout.Space(20); if (curSkillblockList != null) { if (GUILayout.Button("创建skillBlock")) { Window_SelectAniClip window = (Window_SelectAniClip)EditorWindow.GetWindow(typeof(Window_SelectAniClip), false, "SelectAniClip"); window.Show(this.curSkillblockList, this.ani); } } GUILayout.EndVertical(); TableToolMenu.Layout_DrawSeparatorV(Color.gray, 2); }
void ParseBlock(StateActionBlock block, AI_StateItem ai_item, AI_StateAttribute ai_attribute) { foreach (var f in block.funcs) { if (f.classname.Equals("attack")) { AniClip ac = ap.GetClip(block.playani); SubClip subAc = null; if (block.playsubani != "" && block.playsubani != null) { subAc = ac.GetSubClip(block.playsubani); } int begin = 0; int end = 0; if (subAc != null) { begin = (int)subAc.startframe; end = (int)subAc.endframe; } else { begin = 0; end = ac.frames.Count - 1; } for (int i = begin; i <= end; i++) //第一层,遍历frame { foreach (var box in ac.frames[i].boxesinfo) //第二层遍历box { if (box.mBoxType.Equals("box_attack")) { float pos = (box.mPosition.z + box.mSize.z / 2); if (ai_attribute.attackpos < pos) { ai_attribute.attackpos = pos; } } } } } else if (f.classname.Equals("move") || f.classname.Equals("force")) { ai_attribute.movenum = (ai_attribute.movenum + f.vecParam0); //记下位移 作为判断条件 } } foreach (var s in table.allStates) { if (s.conditions.Count == 0) { continue; } foreach (var c in s.conditions) { if (!c.stateBefore.Equals("stand") && !c.stateBefore.Equals("walk")) { if (c.stateBefore.Equals(ai_attribute.name)) { AI_CanChangeState _s = new AI_CanChangeState(); _s.state = s.name; if (c.cmdActive != "5") { _s.cmdstr = c.cmdActive; ai_attribute.canChangeState.Add(_s); } } } } } ai_item.cmdAttribute.Insert(0, ai_attribute); }