void SetFrame(int f, bool force = false) { if (curframe != f || force) { ani.SetPose(curAniClip, f, true); curframe = f; //动画编辑器 切换帧刷新curSkillEventList curSkillEventList = EditorSkillTool.GetCurFrameEventList(this.curframe, curSkillblock); } }
private void OnGUI_DrawAniFrame() { GUILayout.Label("动画播放器:"); var ani = curAniClip; anipos = EditorGUILayout.BeginScrollView(anipos, true, false, GUILayout.Height(230)); if (curAniClip == null) { EditorGUILayout.EndScrollView(); return; } GUILayout.Label("Animation pos:(" + curframe + "/" + ani.aniFrameCount + ")"); int nf = (int)GUILayout.HorizontalScrollbar(curframe, 1, 0, ani.aniFrameCount); GUILayout.BeginHorizontal(); for (int i = 0; i < ani.aniFrameCount; i++) { var obc = GUI.backgroundColor; if (curframe == i) { GUI.backgroundColor = Color.green; } GUILayout.BeginVertical(GUILayout.Width(1)); var oc = GUI.color; string txt = "F"; if (ani.frames[i].key) { GUI.color = new Color(1.0f, 0.4f, 0.6f, 1.0f); txt = "K"; } GUILayout.Label(i.ToString()); if (GUILayout.Button(txt)) { nf = i; GUI.FocusControl("RefreshFocus"); } GUI.color = oc; List <SkillEvent> tmp = EditorSkillTool.GetCurFrameEventList(i, curSkillblock); if (tmp.Count == 0 || tmp == null) { GUILayout.Space(60); } else { GUI.color = new Color(1.0f, 1f, 0f, 1.0f); GUILayout.Space(39); if (GUILayout.Button("e")) { nf = i; GUI.FocusControl("RefreshFocus"); } } //关键帧下需要条垂直的空格 if (ani.frames[i].key) { GUILayout.Space(60); } GUI.color = oc; if (ani.frames[i].key == false) { //调整曲线 GUILayout.BeginHorizontal(); GUILayout.Space(5); float lerp = GUILayout.VerticalScrollbar(ani.frames[i].lerp, 0.01f, 1.0f, 0, GUILayout.Height(120)); if (lerp != ani.frames[i].lerp) { ani.frames[i].lerp = lerp; ani.CalcLerpFrameOne(i); if (i == curframe) { SetFrame(curframe, true); // EditorUtility.SetDirty(ani); } } GUILayout.EndHorizontal(); } //box帧按钮 string b_txt = "F"; if (ani.frames[i].box_key) { GUI.color = new Color(1.0f, 0.4f, 0.6f, 1.0f); b_txt = "K"; } if (GUILayout.Button(b_txt)) { nf = i; GUI.FocusControl("RefreshFocus"); } GUI.color = oc; string d_txt = "○"; if (ani.frames[i].dot_key) { GUI.color = new Color(1.0f, 0.4f, 0.6f, 1.0f); d_txt = "●"; } if (GUILayout.Button(d_txt)) { nf = i; GUI.FocusControl("RefreshFocus"); } GUILayout.EndVertical(); GUI.color = oc; GUI.backgroundColor = obc; } SetFrame(nf); GUILayout.EndHorizontal(); GUILayout.EndScrollView(); }
/// <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); }