람다 함수 캡쳐 관련 질문
326
작성한 질문수 11
안녕하세요 교수님, 람다 함수 캡쳐 관련 질문이 있어서 글을 올렸습니다.
fps 프로젝트를 만들고 있는데, VICharacter 에서 reload 를 호출하면 VIWeaponbase를 상속받는 AKWeapon 에서 Reload 함수가 호출이 되는 형식입니다.
VICharacter 에 bIsReloading 을 선언해 놓았는데, AKWeapon에서 캐릭터 참조를 가져와 재장전이 끝난 후 setter 로 false 설정을할 때 Timerdelegate 람다식에서 Character에 액세스를 하지 못합니다. 제 생각에는 참조의 생명 주기에 문제는 없는 것 같은데,,
왜 람다식 안에서만 캐릭터 참조를 사용 못하는지 모르겠습니다.
아래는 Reload 코드와 프로젝트 깃허브 주소입니다.
void AVIAKWeapon::Reload()
{
Super::Reload();
if (UWorld* World = GetWorld())
{
APlayerController* PC = UGameplayStatics::GetPlayerController(World, 0);
if (PC)
{
AVICharacter* Character = Cast<AVICharacter>(PC->GetCharacter());
if (Character)
{
if (AmmoCount < MaxAmmo)
{
if (!bDoOnceReload && !Character->GetbIsReloading())
{
Character->SetbIsReloading(true);
Character->GetFirstPersonMesh()->GetAnimInstance()->Montage_Play(AKReloadActionMontage, 1.0f);
Mesh->PlayAnimation(ReloadActionAnimation, false);
FTimerHandle ReloadTimeHandle;
GetWorld()->GetTimerManager().SetTimer(ReloadTimeHandle, FTimerDelegate::CreateLambda([&]()
{
Character->SetbIsReloading(false);
AmmoCount = MaxAmmo;
//DF("EndTimer bisRelaoding %d", Character->GetbIsReloading())
// TimerHandle 초기화
GetWorld()->GetTimerManager().ClearTimer(ReloadTimeHandle);
}), ReloadTime, false);
bDoOnceReload = false;
}
}
}
}
}
}https://github.com/chataeg/VI/tree/Part7
답변 3
0
AVICharacter* CapturedCharacter = Character;
GetWorld()->GetTimerManager().SetTimer(ReloadTimeHandle, FTimerDelegate::CreateLambda([&, CapturedCharacter]()
{
CapturedCharacter->SetbIsReloading(false);
AmmoCount = MaxAmmo;
//DF("EndTimer bisRelaoding %d", Character->GetbIsReloading())
// TimerHandle 초기화
GetWorld()->GetTimerManager().ClearTimer(ReloadTimeHandle);
}), ReloadTime, false);
안전하게 람다식에서 캡쳐할 때 변수를 같이 캡쳐해주었더니 잘 작동합니다 ! 감사합니다!
무한맵 제작과정중에 GetWorld 가 Nullptr 을 반환합니다.
0
41
2
12강 행동트리에서 질문이 있습니다.
0
51
1
위젯 사이즈랑 위치 질문드려요.
0
81
3
행동트리의 데코레이션 관련하여 질문이 있습니다.
0
93
3
VS 2026 의 문제일까요?
0
476
2
에셋참조 블루프린트질문
0
66
2
애님 몽타주 콤보 관련질문
0
70
2
ThirdPerson CDO 에러가 생깁니다.
0
95
3
캐릭터가 움직이지 않습니다.
0
176
4
쿠킹 폴더 지정시 , Item 이외에는 지정하지 않는지 궁금합니다.
0
62
2
TSoftObjectPtr 를 사용했음에도, 메모리에 로드 됩니다.
0
93
2
7강에 나오는 생성자에 대해서 궁금합니다.
0
77
2
6강을 마무리하며 트레이스 채널 을 이해하지 못했습니다.
0
73
2
3강을 마무리 하며, 카메라가 움직이지 않습니다.
0
70
2
Use Controller Rotation 옵션값이 궁금합니다.
0
83
2
3강 입력 시스템 적용 중, 5.6 버전은 입력 매팅이 2개 입니다.
0
64
2
PlayerController 에 대헤 제가 잘못 이해한 것 같습니다.
0
78
2
13강 UpdateStat 부분에서 문제를 겪고 있습니다.
0
63
2
BP_PlayerController의 CustomEvent노드 이유가 궁금합니다.
0
64
1
콤포넌트 포인터 선언시 TObjectPtr<>과 UStaticMeshComponent* 차이점
0
72
2
CharacterMovementComponent의 RotationRate관련해서 질문이 있습니다.
0
113
2
언리얼 공부방법에 대해 질문드립니다.
0
82
2
4강 에서 이상한 그림자가 남습니다.
0
42
1
2강에서 카메라 회전안되시는분 참고
2
84
2





