Bug fix

1. attack 키를 지속적으로 누르면 trigger parameter 또한 지속적으로 들어감.

if(_playerController.isAttack)
	_animaotr.SetTrigger(PlayerAnimParameter.IsAttack);

Input System

  • Input system에서 started가 누를 때 호출되고 canceled 때 취소가 된다.
  • started와 performed는 입력 강도 차이라서 started는 말그대로 입력을 시작하는 시점에서 감지가 되고 performed는 어느정도 '입력'이 완벽히 인식되는 시점에서 호출된다.
  • 하지만 위 차이는 키보드에서는 느낄 수 없으므로 사실상 동일한 작용이라고 보면 된다.(키보드에 한해서만)
  • 위 두 동작 후 canceled가 호출이 되는데, canceled는 말 그대로 입력이 최소됐을 때.

문제점

  • 위 코드에서 isAttack은 키보드가 눌려지는 시점에서 true가 되고 true가 되면 trigger가 켜진다.
  • isAttack은 canceled가 될 때까지 계속해서 true 상태이다. (= 키보드 입력 키가 들어간 순간부터 true, 입력 키에 손을 떼야 false)
  • isAttack으로부터 계속해서 trigger에 입력이 되었던 이유 또한 canceled가 호출되기 전까지 isAttack이 true 상태이기 떄문이었다.
  • 이 문제를 해결하기 위해 isAttack을 false로 만드는 코드를 canceled가 아닌 animation parameter를 넘겨주고 나서로 시점을 바꿔 해결하였다.
if(_playerController.isAttack)
{
	_animator.SetTrigger(PlayerAnimParameter.IsAttack);
    _playerController.isAttack = false;
}

2. jump attack이 끝나자마자 jump를 누르면 jump 자세 고정

문제점

  • jump attack은 종료 즉시 collider에 의해 isAir = false가 됨
  • jump는 jump키를누름과 동시에 trigger 값이 들어가는 구조
  • JumpAttack 종료 즉시 점프 키 입력 시 isAir가 false인 상태에서 Jump로 전이되기 때문에, Jump->Fall 전이 조건인 isAir = true를 만족하지 못하여 Jump 상태에 고정된다.
  • jump attack에 delay을 줘서 해결하였다.

3. one hand dodge 오류

문제점

  • one hand 상태에서 dodge 키를 누르면 idle animation이 모두 끝나야 dodge animation으로 전환된다.
  • 무기를 지니고 있는 모든 상태에서 동일하게 dodge가 구현되어야 하므로 any state에서 dodge를 실행하도록 하였다.
  • 그럼에도 dodge 키를 누르면 바로 전환이 되는 것이 아닌 idle 상태를 모두 마쳐야 실행이 된다.
  • animation의 delay가 일어나기 때문에 dodge에 의한 이동이 먼저 실행되고 animation이 실행되는 문제가 발생한다.
  • 불필요한 조건을 제거하고 exit로 빠져나가지 않게 하여 고쳤다. (exit로 빠져나가면 unarmed를 거쳐와야 하므로)

4. dodge 키를 누르고 있으면 제자리에서 계속 animation이 재생되는 오류

문제점

  • 제자리에서 계속 도는 오류 발견
  • dodge 키를 누른 상태로 유지하고 있을 때
    isDodging이 dodge키의 canceld가 호출되기 전까지 계속해서 true이므로 제자리에서 회전 애니메이션이 계속해서 재생되는 문제 (위 문제와 유사하다.)
  • 이를 고치기 위해 animator에 값을 넘겨줌과 동시에 isDodging을 false로 만들어 주었다.

구현

combo attack


  • animation에 이벤트를 설정해서 combo 공격이 가능한 구간을 설정해주고 해당 구간 안에서 공격 키를 눌렀을 경우에만 attack이 가능하도록 했다.
public void AbleToCombo()
{
    ableToCombo = true;
}
public void NotAbleToCombo()
{
    ableToCombo = false;
}
  • ableToCombo가 true 상태 사이에서만 '공격 키' 입력을 받아야 한다.
  • 공격 키를 받는건?
    • combo 공격이 가능한 범위 내에서 '공격 키'를 입력 받았다는 flag가 필요함
    • 공격 키를 받았다는 표시를 bool로 처리하고 이를 또 trigger로 만들었다.
internal bool isAbleComboAttack = false;
if (_playerBehaviour.ableToCombo) isAbleComboAttack = true;
if (_playerController.isAbleComboAttack)
{
    _animator.SetTrigger(PlayerAnimParameter.IsAbleComboAttack);
        _playerController.isAbleComboAttack = false;
}
profile
NEWB!

0개의 댓글