▣ 헤더 파일 추가 (#include "Components/Image.h")
UImage를 사용하기 위해 Components/Image.h 헤더를 추가합니다. 이 헤더에는 이미지 위젯과 관련된 모든 함수 및 클래스가 정의되어 있습니다.
▣ 조건 체크 및 초기화
if (Animinstance->IsGetWeapon && Animinstance->WeaponType != 3):
플레이어가 무기를 장착하고 있고, 무기의 종류가 특정 타입(3번 타입)이 아닌 경우 조준 상태로 변경하는 조건입니다.
if (HUDClass == nullptr):
HUDClass가 아직 로드되지 않은 상태라면, LoadClass를 사용해 블루프린트 위젯 클래스를 로드합니다.
TEXT("/Game/UMG/WB_HUD.WB_HUD_C") 경로를 사용해 블루프린트 클래스를 로드합니다.
▣ HUD 위젯 생성 및 뷰포트에 추가
CreateWidget<UUserWidget>(...):
CreateWidget를 사용하여 UUserWidget 인스턴스를 생성합니다.
AddToViewport()는 HUD 위젯을 화면에 표시하도록 추가하는 함수입니다.
▣ 텍스처 로드
UTexture2D* NewAimImage = LoadObject<UTexture2D>(nullptr, TEXT("/Game/Textures/NewWeaponAimImage.NewWeaponAimImage"));
새로운 조준 텍스처를 로드합니다. 경로는 게임의 콘텐츠 브라우저에 있는 텍스처 파일의 경로를 사용합니다.
▣ 이미지 위젯 찾기
UImage* WeaponAimImage = Cast<UImage>(HUDWidget->GetWidgetFromName(TEXT("WeaponAimImage")));
GetWidgetFromName를 사용하여 블루프린트에서 추가된 Image 위젯을 찾습니다.
"WeaponAimImage"는 블루프린트에서 해당 이미지 위젯의 이름입니다. 이를 통해 특정 UImage 위젯에 접근할 수 있습니다.
▣ 기존 이미지 크기 가져오기
FVector2D CurrentImageSize = WeaponAimImage->Brush.ImageSize;
Brush.ImageSize를 사용하여 기존 UImage 위젯의 크기를 가져옵니다. ImageSize는 FVector2D 타입으로 가로와 세로 크기를 나타냅니다.
▣ 이미지 변경
WeaponAimImage->SetBrushFromTexture(NewAimImage);
새로운 텍스처를 사용해 UImage 위젯의 브러시를 변경합니다. 이 함수는 이미지를 동적으로 변경할 때 사용됩니다.
▣ 기존 크기 유지
WeaponAimImage->SetBrushSize(CurrentImageSize);
기존 UImage의 크기를 SetBrushSize 함수를 통해 유지하면서 새로운 텍스처가 적용되도록 합니다.
이를 통해 이미지를 변경해도 기존 이미지와 동일한 크기가 유지됩니다.
▣ 코드 설명:
이 코드는 플레이어가 무기를 들고 있을 때 조준 모드(Aim Mode)로 진입하고, HUD 위젯을 생성하여 무기 관련 UI를 업데이트한 후, 타임라인을 시작하는 과정입니다.
무기 소유 및 조준 가능 상태 확인:
Animinstance->IsGetWeapon가 true이고, 무기 타입이 3(예: 근접 무기와 같은 비조준 무기)이 아닌 경우에만 코드가 실행됩니다. 즉, 무기가 조준 가능한 상태인지를 먼저 확인합니다.
HUD 위젯 생성 및 추가:
HUDWidget이 존재하지 않으면 CreateWidget 함수를 호출하여 새로운 HUD 위젯을 생성합니다.
위젯이 유효하고, 아직 화면(Viewport)에 추가되지 않은 경우 AddToViewport()를 호출하여 UI를 화면에 표시합니다.
위젯에서 무기 조준 이미지 설정:
HUDWidget에서 조준 이미지를 표시할 UImage 컴포넌트를 찾습니다. 위젯 내부의 이름이 WeaponAimImage인 컴포넌트를 가져옵니다.
무기 이미지가 제대로 존재하는지 확인한 후, 이미지 맵(WeaponAimImageMap)에서 Revolver에 해당하는 텍스처를 찾아 이미지로 설정합니다.
SetBrushFromTexture 함수를 통해 새로운 텍스처로 이미지를 변경하고, 기존의 이미지 크기를 유지하면서 적용합니다.
▣ 관련 API
https://docs.unrealengine.com/5.0/en-US/API/Runtime/UMG/Components/UImage/SetBrushFromTexture/
https://docs.unrealengine.com/5.0/en-US/API/Runtime/UMG/Components/UImage/SetBrushSize/
https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Components/UImage/SetBrushFromTexture/
'[ Unreal5 ] > - 언리얼엔진5 실습' 카테고리의 다른 글
언리얼엔진5 c++ Actor 이름 추출 (0) | 2024.10.11 |
---|---|
언리얼엔진5 c++ 카메라 상하 이동(총기 반동) (4) | 2024.10.01 |
언리얼엔진5 c++ GetLocation() 함수들 차이 (0) | 2024.09.16 |
언리얼엔진5 c++ ConstructorHelpers::FClassFinder와 LoadClass<>, LoadObject<> 차이 (4) | 2024.09.14 |
언리얼엔진5 c++ PlaySound2D, PlaySoundAtLocation 차이 (2) | 2024.09.07 |
댓글