개요
오늘은 플레이어의 공격 콤보 시스템과 피격 시스템을 중심으로 구현하고, 그 과정에서 발생한 문제들을 디버깅하고 구조를 개선하는 데 집중했다. 특히 플레이어가 연속으로 피격당하는 상황이나, 전투 중 모션 전환 타이밍 같은 세밀한 부분까지 고민하며 다듬었다. 기존에 구현했던 로직을 재활용할 수 있는 부분은 최대한 재활용해서 작업했다.
내용
공격 시스템
- PlayerActionAttack 클래스에서 콤보 공격 단계 (ComboStep)를 관리하고, 애니메이션 이벤트로 콤보 입력 타이밍을 열어주는 구조로 설계.
- 공격 중 SetAttackComboTrue/False를 통해 플레이어 입력을 받아 다음 콤보로 전환.
- 에셋을 바꾸니 무기 회전을 시켜야했는데, 회전 시킨 무기가 휘둘러질 때 기존 무기 충돌 판정 영역이 붙어있지 않아, Anchor 기반 WeaponController에서 처리하도록 구조 리팩토링.
- 추가로 트리거 영역은 젓가락 형태 무기에 맞게 Anchor 배열로 설정해 실제 휘두르는 방향과 일치하게 구성.
피격 시스템
- 넉백 등 구현되어 가고 있어 기존 피격도 method 대신 state로 분리함 : PlayerStateHit 클래스를 만들어 피격 상태를 독립적으로 관리.
- 피격 시 기존 액션(공격/대시)을 즉시 종료하고, 일정 시간 동안 조작을 막음.
- 피격 애니메이션 + 이펙트 + 카메라 흔들림을 함께 처리해 연출 강화.
- 피격이 연속으로 들어올 경우, 애니메이션이 매번 재생되지 않는 문제 발견 → 트리거 대신 bool로 수정 및 hasExitTime false 설정. hitDuration 적절하게 맞춤
구조 개선
- CharacterBase와 PlayerController 간 역할 분리를 유지하면서, 데미지 이벤트 발생 시 SetState(Hit)로 상태 전환.
- 피격 상태에서 일정 시간 후 자동으로 Idle로 복귀되도록 설계.
오늘 만든 PlayerStateHit
using UnityEngine;
public class PlayerStateHit : IPlayerState
{
private PlayerController _playerController;
private float hitDuration = 0.4f; // 피격 상태 지속 시간
private float timer = 0f;
public void Enter(PlayerController playerController)
{
_playerController = playerController;
// 애니메이션 실행
_playerController.SafeSetBool("IsHit", true);
// 현재 액션 중단 (공격, 대시 등)
_playerController.CurrentAction?.EndAction();
// 이펙트 및 카메라 흔들림
_playerController.PlayHitEffect();
_playerController.ShakeCamera();
// 타이머 초기화
timer = 0f;
}
public void Update()
{
timer += Time.deltaTime;
if (timer >= hitDuration)
{
_playerController.SetState(PlayerState.Idle);
}
}
public void Exit()
{
_playerController.SafeSetBool("IsHit", false);
_playerController = null;
}
}
느낀 점
에셋에 담긴 애니메이션 쓰려고 노력했는데 결국 미숙하게나마 직접 만들었다. 기존 애니메이션은 root 축을 사용하고 있어 내가 원하는 달리면서 공격에는 맞지 않았다(상체만 override해봐도 회전이 이미 깨지는거기 때문에 제대로 휘두르지 않음)...
개발하면서 점점 더 생각의 범위가 넓어지는 느낌이다. 이번에 구조도 바꾸고 피격도 어떤 느낌으로 구현할까 고민하다보니 시간이 후딱후딱 갔다.
'공부 > [TIL] Game Bootcamp' 카테고리의 다른 글
[TIL] #11. 공격, 피격 이펙트 : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (1) | 2025.05.08 |
---|---|
[TIL] #10. 대시 이펙트 : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (0) | 2025.05.07 |
[TIL] #7. 플레이어 피격 : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (1) | 2025.04.29 |
[TIL] #6. Animation event 작동 안함(뭔가 만들었다면 꼭 초기화를 하자) : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (0) | 2025.04.25 |
[TIL] #5. 플레이어 대시 Action : 멋쟁이사자처럼부트캠프 Unity 게임 개발 3기 (0) | 2025.04.24 |