본문으로 건너뛰기
Unreal Engine GAS(Gameplay Ability System) 심화LESSON 29

대시·이동 Ability와 CharacterMovementComponent 연동

난이도심화
예상 시간190분
선수지식28강의 예측 입력과 서버 검증

29강. 대시·이동 Ability와 CharacterMovementComponent 연동

1. 이번 강의에서 해결할 문제​

Client가 SetActorLocation으로 대시하면 서버가 원래 위치로 보정합니다. Multicast로 위치를 맞춰도 CharacterMovement의 SavedMove와 충돌하고 지연·패킷 손실에서 흔들립니다. Ability는 이동 요청 수명을 관리하고 실제 이동은 CharacterMovement 정책을 따라야 합니다.

2. 학습 목표​

3. 핵심 개념​

짧은 프로토타입은 서버·소유 Client가 같은 방향으로 LaunchCharacter를 실행하고 보정을 측정할 수 있습니다. 대시 상태가 Movement Mode·마찰·속도 제한을 바꾼다면 Custom CharacterMovement와 SavedMove 압축 Flag가 필요할 수 있습니다. 이 과정은 기본선을 먼저 검증하고 측정된 문제가 있을 때 확장합니다.

4. 구현​

GA_Dash.cpp
void UGA_Dash::ActivateAbility(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData)
{
if (!CommitAbility(Handle, ActorInfo, ActivationInfo))
{
EndAbility(Handle, ActorInfo, ActivationInfo, true, true);
return;
}

ACharacter* Character = Cast<ACharacter>(ActorInfo->AvatarActor.Get());
if (!Character)
{
EndAbility(Handle, ActorInfo, ActivationInfo, true, true);
return;
}

const FVector Direction = ResolveClampedDashDirection(Character);
Character->LaunchCharacter(Direction * DashSpeed, true, false);
EndAbility(Handle, ActorInfo, ActivationInfo, true, false);
}

서버는 Stunned·Dead, 지면 상태, 방향 길이와 Cooldown을 다시 검사합니다. 이동 장애물과 낙하 정책을 명시합니다.

5. 코드가 동작하는 이유​

CharacterMovement가 Launch 속도를 자신의 네트워크 이동 흐름에 포함해 서버 위치로 수렴시킵니다. Ability는 비용·쿨다운·상태 태그와 실행 시점을 소유하지만 위치 복제 자체를 재구현하지 않습니다.

6. 실패 사례와 해결​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

대시·이동 Ability와 CharacterMovementComponent 연동 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“대시·이동 Ability와 CharacterMovementComponent 연동”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2‘Client SetActorLocation’ 실수를 판단할 때 “대시·이동 Ability와 CharacterMovementComponent 연동” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

29강. 대시·이동 Ability와 CharacterMovementComponent 연동 미완료 상태