
protected override void Update() { base.Update(); //將輸入的 keycode 塞進 queue 中 KeyCode keyCode = KeyCode.Escape; if (Input.GetKeyDown(KeyCode.X)) { keyCode = KeyCode.X; } if (Input.GetKeyDown(KeyCode.A)) { keyCode = KeyCode.A; } if (Input.GetKeyDown(KeyCode.C)) { keyCode = KeyCode.C; } if (Input.GetKeyDown(KeyCode.Z)) { keyCode = KeyCode.Z; } if (keyCode != KeyCode.Escape) { _actionQueue.Enqueue(keyCode); //如果 queue 中只有一個 keycode,就立刻執行動畫 if (_actionQueue.Count == 1) { _lastKeyCode = keyCode; SetAnimation(keyCode); } } } private void SetAnimation(KeyCode keyCode) { //X是普攻,會根據目前是否有輸入向上或向下來判斷是向上、向下、或向前的攻擊 if (keyCode == KeyCode.X) { if (Input.GetKey(KeyCode.UpArrow)) { AttackUp(); } else if (Input.GetKey(KeyCode.DownArrow)) { AttackDown(); } else { Attack(); } } //其他的動作指令 if (keyCode == KeyCode.A) { SkillA(); } if (keyCode == KeyCode.C) { Dash(); } if (keyCode == KeyCode.Z) { Jump(); } } void Attack() { Animator.SetTrigger("Attack"); } |

public void OnActionEnd() //動作結束的時候 { if (_actionQueue.Count > 0) { _actionQueue.Dequeue(); if (_actionQueue.Count > 0) { KeyCode currentKeyCode = _actionQueue.Peek(); ContinueActionData.ActionEnum currentActionEnum = KeyCodeToActionEnum(currentKeyCode); ContinueActionData.ActionEnum lastActionEnum = KeyCodeToActionEnum(_lastKeyCode); //判斷是否為可連續的動作 if (ContinueActionData.Data[(int)lastActionEnum, (int)currentActionEnum]) { _lastKeyCode = currentKeyCode; SetAnimation(currentKeyCode); } else { _actionQueue.Clear(); } } } } |

