public static void Show(FB.PosePlus.AniPlayer aniPlayer = null, AniClip clip = null, int curfunc = -1, int curframe = -1) { var window = EditorWindow.GetWindow <Window_StateBlockFuncs>(false, "Block详细编辑"); window.Init(); if (clip != null) { _clip = Window_StateTable.aniPlayer.GetClip(Window_StateTable.selectBlock.playani); _subclip = clip.GetSubClip(Window_StateTable.selectBlock.playsubani); Debug.Log(Window_StateTable.selectBlock.playani); } else { _clip = clip; _subclip = clip.GetSubClip(Window_StateTable.selectBlock.playsubani); } if (curframe >= 0) { selectFrame = curframe; } if (curfunc >= 0) { SelectSelectFunc(Window_StateTable.selectBlock.funcs[curfunc]); } else { SelectSelectFunc(null); } clip = Window_StateTable.aniPlayer.GetClip(Window_StateTable.selectBlock.playani); if (clip != null) { _subclip = clip.GetSubClip(Window_StateTable.selectBlock.playsubani); } if (curfunc >= 0 && curfunc <= Window_StateTable.selectBlock.funcs.Count - 1) { SelectSelectFunc(Window_StateTable.selectBlock.funcs[curfunc]); } if (aniPlayer != null) { _aniPlayer = aniPlayer; } pickfunc = null; }
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); }