[이전 시간에 구현한 Interface] (https://unrealstudyhome.tistory.com/109)

┌─────────────────┐
│ ILNIInteractable │ ← 인터페이스
└────────┬────────┘
│ implements
┌────┴─────┬──────────┐
│ │ │
┌───▼───┐ ┌───▼───┐ ┌───▼───┐
│Character │ │ 기믹1 │ │ 기믹2 │
└───────┘ └───────┘ └────────┘
각 기믹들과 캐릭터에 한해서 상호작용 인터페이스를 상속 받아 구현을 한 후
캐릭터의 입력을 받아서 각자에 맞는 상호작용 로직을 호출하는 형식으로 구현함
캐릭터에서 액터 상호작용 입력흐름 구조는 아래와 같다.
에디터 테스트 방법
void ALNCharacter::LeftClickInteract(AActor* Interactor)
{
// 서버에서만 실행
if (!HasAuthority())
{
UE_LOG(LogTemplateCharacter, Warning, TEXT("LeftClickInteract called on client"));
return;
}
if (!Interactor)
{
UE_LOG(LogTemplateCharacter, Warning, TEXT("Interactor is null"));
return;
}
// 캐릭터를 잡는 로직
ALNCharacter* InteractorChar = Cast<ALNCharacter>(Interactor);
if (!InteractorChar || !InteractorChar->GrabComponent)
{
UE_LOG(LogTemplateCharacter, Warning, TEXT("Invalid Interactor or GrabComponent"));
return;
}
// GrabComponent를 통해 잡기 시도
InteractorChar->GrabComponent->HandleGrabRequest(this);
UE_LOG(LogTemplateCharacter, Log, TEXT("[Server] %s grabbed by %s"),
*GetName(), *Interactor->GetName());
}
void ALNCharacter::RightClickInteract(AActor* Interactor)
{
// 서버에서만 실행
if (!HasAuthority())
{
UE_LOG(LogTemplateCharacter, Warning, TEXT("RightClickInteract called on client"));
return;
}
if (!Interactor || !GetCharacterMovement())
{
return;
}
ALNCharacter* InteractorChar = Cast<ALNCharacter>(Interactor);
if (!InteractorChar)
{
return;
}
// 상호작용시전한 캐릭터의 밀기 애니메이션 동작
InteractorChar->Server_PlayMontage(InteractorChar->CharacterPushMontage, InteractorChar->MontagePlayRate);
// 밀치는 방향 계산
FVector LaunchDirection = InteractorChar->GetActorForwardVector().GetSafeNormal();
FVector LaunchVelocity = LaunchDirection * 1000.0f + FVector(0, 0, 300.0f);
// 캐릭터를 날림
LaunchCharacter(LaunchVelocity, true, true);
UE_LOG(LogTemplateCharacter, Log, TEXT("[Server] %s pushed by %s"),
*GetName(), *Interactor->GetName());
}
기존 캐릭터 상호작용 로직을 인터페이스를 사용하여 구현하였다.
'언리얼 팀프로젝트' 카테고리의 다른 글
| 최종 팀 프로젝트 커스터마이징 시스템 데이터화 및 UI 구현 (0) | 2025.12.04 |
|---|---|
| 캐릭터 상호작용 자료 서칭 (0) | 2025.11.14 |
| 최종 팀 프로젝트 Interact 인터페이스 구현 (1) | 2025.11.13 |
| 최종 팀 프로젝트 Interact 인터페이스 및 Pickup 로직 수정 기획 (0) | 2025.11.12 |
| 최종 팀 프로젝트 Pickup 기능 구현 -2 (0) | 2025.11.07 |