스턴 디버프
void AModularRobot::SetInputEnable(const bool bEnableInput)
{
APlayerController* PC=Cast<APlayerController>(GetController());
if (!CR4S_ENSURE(LogHong1,PC)) return;
UEnhancedInputLocalPlayerSubsystem* InputSubsystem=ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer());
if (!CR4S_ENSURE(LogHong1,InputSubsystem)) return;
if (bEnableInput)
{
InputSubsystem->AddMappingContext(InputMappingContext,RobotSettings.MappingContextPriority);
}
else
{
InputSubsystem->RemoveMappingContext(InputMappingContext);
}
}
- 스턴 디버프가 활성화될 때, 호출되는 함수
- bEnableInput이 false이면 EnhancedInputLocalPlayerSubsystem에서 IMC를 제거해서 모든 입력이 불가능 하도록 세팅
- bEnableInput이 true이면 다시 IMC 서브시스템에 다시 추가하여 입력이 가능
void UModularRobotStatusComponent::AddStun(const float InAmount)
{
const float Temp=FMath::Clamp(RobotStatus.Stun+InAmount,0.f,RobotStatus.MaxStun);
RobotStatus.Stun=Temp;
const float Percentage=FMath::Clamp(RobotStatus.Stun/RobotStatus.MaxStun,0.f,1.f);
OnStunChanged.Broadcast(Percentage);
if (Percentage>=1&&!bIsStunned)
{
if (!CR4S_ENSURE(LogHong1,GetWorld())) return;
bIsStunned=true;
OwningCharacter->SetInputEnable(false);
GetWorld()->GetTimerManager().ClearTimer(StunTimerHandle);
GetWorld()->GetTimerManager().SetTimer(
StunTimerHandle,
this,
&UModularRobotStatusComponent::RemoveStunDebuff,
RobotStatus.StunDuration,
false
);
}
}
void UModularRobotStatusComponent::RemoveStunDebuff()
{
if (!CR4S_ENSURE(LogHong1,OwningCharacter)) return;
AddStun(-RobotStatus.MaxStun);
OwningCharacter->SetInputEnable(true);
bIsStunned=false;
}
- 스턴 게이지에 변동이 생겼을 때, 게이지가 꽉 찼는지 확인 후 디버프 적용
- Percentage값이 1이상이면 꽉찬 것이므로 SetInputEnable을 호출하여 입력 차단 및 타이머 재설정
- 타이머를 이용하여 StunDuration이 지나면 스턴 디버프 해제용 함수인 RemoveStunDebuff가 호출
- RemoveStunDebuff가 호출되면 Stun게이지를 0으로 초기화 및 입력이 다시 가능하도록 설정
고찰
- bIsStunned 라는 상태 표시용 플래그 변수를 이용하여 각 인풋 바인딩 함수들에게 조건 판별하는 방식도 가능
- 모든 입력 차단이 아니라 특정 몇몇 인풋들의 경우 통과를 시켜줘야 한다면 고려해 볼만한 방법
- 스턴 상태이상의 경우 전투 중 1초간의 패널티를 주기 위함이니 모든 인풋을 블락하는 형식으로 구현
- 추후 에너지 고갈로 인해 로봇이 작동 중지되는 경우에는 하차가 가능해야 하니 위에서 언급한 상태 표시용 플래그 변수를 이용하여 각 인풋 바인딩 함수에서 조건을 판별하는 식으로 구성하는 것을 고려 중
참고자료
'프로젝트 > CR4S' 카테고리의 다른 글
| Core Reboot:Four Seasons - #30 에너지 시스템 및 로봇의 작동 중지 (0) | 2025.06.14 |
|---|---|
| Core Reboot:Four Seasons - #28 트러블슈팅 - AttachToComponent 활용시의 소켓이 추가되는 본에 따른 차이점 (0) | 2025.06.13 |
| Core Reboot:Four Seasons - #27 트러블슈팅 - 부적절한 상황에서의 스태미너 소모 (0) | 2025.06.13 |
| Core Reboot:Four Seasons - #26 리소스(스태미너) 감소 및 회복 시스템 (0) | 2025.06.12 |
| Core Reboot:Four Seasons - #25 트러블슈팅 - Component 이름 변경과 리다이렉터로 인한 인식 오류 (0) | 2025.06.11 |