1. MaxWalkSpeed + 타이머
- 특성
- 간단함: 구현하기 쉽고 이해하기 쉬워서 초보자도 접근하기 좋다.
- 직관적: 캐릭터의 이동 속도를 직접 제어하기 때문에 원하는 만큼 빠르게, 원하는 시간 동안 대시 효과를 줄 수 있다.
- 단점: 순간적인 "밀어내는" 듯한 느낌보다는 "빨라지는" 느낌이 강할 수 있다.
- 사용법
// 헤더 파일에 변수와 함수 선언
private:
float NormalSpeed;
float DashSpeed;
FTimerHandle DashTimerHandle;
void StopDash();
public:
UFUNCTION(BlueprintCallable, Category = "Movement")
void StartDash();
// CPP 파일에서 구현
void AYourCharacter::BeginPlay()
{
Super::BeginPlay();
// 기본 이동 속도 저장
NormalSpeed = GetCharacterMovement()->MaxWalkSpeed;
// 대시 속도는 기본 속도의 1.5배로 설정
DashSpeed = NormalSpeed * 1.5f;
}
void AYourCharacter::StartDash()
{
// 대시 속도로 변경
GetCharacterMovement()->MaxWalkSpeed = DashSpeed;
// 이미 실행 중인 타이머가 있다면 초기화
if (GetWorldTimerManager().IsTimerActive(DashTimerHandle))
{
GetWorldTimerManager().ClearTimer(DashTimerHandle);
}
// 0.5초 후에 StopDash 함수 호출
GetWorldTimerManager().SetTimer(DashTimerHandle, this, &AYourCharacter::StopDash, 0.5f, false);
}
void AYourCharacter::StopDash()
{
// 일반 속도로 복귀
GetCharacterMovement()->MaxWalkSpeed = NormalSpeed;
}
2. LaunchCharacter 사용
- 특성
- LaunchCharacter 함수를 사용하면 캐릭터에게 한 방향으로 순간적인 힘을 가해서 슝~ 하고 날아가는 듯한 대시를 구현할 수 있다. 피하거나 짧은 거리를 도약하는 느낌의 대시에 많이 쓰인다.
- 사용법
// 예시 코드 (C++)
void AYourCharacter::StartLaunchDash()
{
// 캐릭터의 현재 앞 방향으로 강하게 밀어내기 (Z 값 0이면 점프 없음)
LaunchCharacter(GetActorForwardVector() * DashForce, true, true);
// 이 방식은 일정 시간 후 자동으로 감속되지만,
// 만약 일정 시간 후에 강제로 멈추고 싶다면 타이머를 사용할 수도 있음
// GetWorldTimerManager().SetTimer(DashTimerHandle, this, &AYourCharacter::StopLaunchDash, 0.5f, false);
}
3. 루트 모션(Root Motion) 기반 대시
- 특성
- 캐릭터의 대시 애니메이션 자체에 이동 정보를 담아서 움직이는 방식.
- 장점: 애니메이션과 움직임이 완벽하게 동기화되어 엄청 부드럽고 자연스러워 보인다. 대시 애니메이션마다 다양한 움직임 패턴을 줄 수 있다.
- 단점: 애니메이션 작업이 필요하고, 구현하기가 조금 더 복잡하다. 애니메이션 길이가 고정되어 있어서 대시 지속 시간을 코드에서 유동적으로 바꾸기 어려울 수 있다.
4. 커브 (CurveFloat) 활용
- 특성
- 앞서 말한 방식들과 병행해서 사용할 수 있는데, 대시 중 속도 변화를 CurveFloat 에셋으로 정의해서 더 부드럽거나 드라마틱하게 만들 수 있다. 예를 들어, 대시 시작할 때 순간적으로 엄청 빨랐다가 서서히 원래 속도로 돌아오는 식의 대시를 구현할 때 유용하다