전투 시스템 구현
Player 공격
Player 공격 collider 생성
- 각 무기마다 '공격' 판정을 인식하는 collider 생성.
- collider는 무기 object 하위에 생성

- collider는 항상 Active 되어있어야 하는가?
- '공격' 판정을 도와줄 collider들을 지속적으로 active 해놓으면 tag를 이용해 monster를 구별한다고 해도 무기를 교체하는 동작이라던가, '공격'이 아닌 단순한 이동 동작 중에 '공격'으로 판정이 들어갈 수 있으므로 실질적으로 '공격'이라고 부를 수 있는 행동 또는 타이밍에만 Active 되어야 한다.
- 활성화 시기
- attack state behaviour를 사용하고 있으므로 OnStateEnter에서 활성화하고 OnStateExit에서 비활성화하도록 하였다.
- state behaviour 자체에서 활성화, 비활성화하게 되면 또 외부에서 collider를 끌어올 수 있는 방법이 상당히 제한적이고 소모적인 방법밖에 쓸 수 밖에 없어서 bool 값을 전해주면 bool 값으로 활성화, 비활성화를 컨트롤 하였다.
- 해당 방법으로 했을 때, 실제로 '공격'을 시작할 때 활성화, '공격'이 끝나면 비활성화가 되었다.
- 하지만 문제 또한 발생하였다.
- 활성화 타이밍

- 시작할 때 활성화 시키고, 끝날 때 비활성화되게 되면 위와 같이 가까이 붙어서 공격할 때 무기를 들어올리는 동작에서 '공격' 판정이 한 번, 내리칠 때 두 번 총 두 번의 공격 판정이 들어가게 된다.
- 이 문제를 고치기 위해 애니메이션 이벤트를 사용하였다.
public void ActivateCollider(float time)
{
if (_weaponSwitch.weaponIndex == (int)WeaponType.OneHand)
{
PlayerAttackCollision._disableTime = time;
_oneHandCol.SetActive(true);
}
else if (_weaponSwitch.weaponIndex == (int)WeaponType.TwoHand)
{
PlayerAttackCollision._disableTime = time;
_twoHandCol.SetActive(true);
}
}
- 각 animation의 '공격' 판정이라 할 수 있는 시간부터 일정한 간격을 두고 비활성화될 수 있도록 하였다.