KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UCompassWidget 클래스 참조

#include <CompassWidget.h>

+ UCompassWidget에 대한 상속 다이어그램 :
+ UCompassWidget에 대한 협력 다이어그램:

Public 멤버 함수

UImage * AddCompassMarker (ECompassMarkerType MarkerType)
 
UTexture2D * GetTextureForMarkerType (ECompassMarkerType MarkerType)
 
void RotateCompass (float ZRotation)
 
void SetMarkerDistance (UImage *InMarker, float Distance)
 마커 거리 설정 (미터 단위)
 
void SetMarkerPosition (UImage *InMarker, float TargetRotation, bool bSideLock)
 
void SetMarkerVisibility (UImage *InMarker, ESlateVisibility InVisibility)
 마커와 거리 텍스트의 Visibility 동시 설정
 

Public 속성

class UImage * Img_Compass
 
TMap< UImage *, class UTextBlock * > MarkerDistanceMap
 마커별 거리 텍스트 매핑
 
TArray< UImage * > Markers
 
TMap< ECompassMarkerType, UTexture2D * > MarkerTextureMap
 
class UCanvasPanel * Pnl_Compass
 

Protected 멤버 함수

virtual void NativeConstruct () override
 

상세한 설명

CompassWidget.h 파일의 25 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ AddCompassMarker()

UImage * UCompassWidget::AddCompassMarker ( ECompassMarkerType  MarkerType)

CompassWidget.cpp 파일의 44 번째 라인에서 정의되었습니다.

45{
46 UImage* NewMarker = NewObject<UImage>(this);
47 if (NewMarker)
48 {
49 UTexture2D* CompassTex = GetTextureForMarkerType(MarkerType);
50 if (CompassTex)
51 {
52 NewMarker->SetBrushFromTexture(CompassTex);
53 }
54
55 Pnl_Compass->AddChild(NewMarker);
56
57 UCanvasPanelSlot* MarkerSlot = Cast<UCanvasPanelSlot>(NewMarker->Slot);
58 if (MarkerSlot)
59 {
60 MarkerSlot->SetAnchors(FAnchors(0.5, 0.5, 0.5, 0.5));
61 MarkerSlot->SetSize(FVector2D(60.f, 60.f));
62 MarkerSlot->SetAlignment(FVector2D(0.5f, 0.5f));
63 MarkerSlot->SetPosition(FVector2D(0.f, 0.f));
64 }
65
66 // 거리 텍스트 생성
67 UTextBlock* DistanceText = NewObject<UTextBlock>(this);
68 if (DistanceText)
69 {
70 Pnl_Compass->AddChild(DistanceText);
71
72 UCanvasPanelSlot* TextSlot = Cast<UCanvasPanelSlot>(DistanceText->Slot);
73 if (TextSlot)
74 {
75 TextSlot->SetAnchors(FAnchors(0.5, 0.5, 0.5, 0.5));
76 TextSlot->SetSize(FVector2D(100.f, 20.f));
77 TextSlot->SetAlignment(FVector2D(0.5f, -0.8f)); // 하단 중앙 정렬
78 TextSlot->SetPosition(FVector2D(0.f, -5.f)); // 마커 위에 배치
79 TextSlot->SetZOrder(100); // 최상위로 설정
80 }
81
82 // 텍스트 스타일 설정
83 FSlateFontInfo FontInfo = DistanceText->GetFont();
84 FontInfo.Size = 14;
85 DistanceText->SetFont(FontInfo);
86 DistanceText->SetJustification(ETextJustify::Center);
87 DistanceText->SetColorAndOpacity(FLinearColor::White);
88 DistanceText->SetText(FText::FromString(TEXT("0m")));
89 DistanceText->SetVisibility(ESlateVisibility::Visible);
90
91 // 텍스트에 그림자 추가 (가독성 향상)
92 DistanceText->SetShadowOffset(FVector2D(1.f, 1.f));
93 DistanceText->SetShadowColorAndOpacity(FLinearColor::Black);
94
95 MarkerDistanceMap.Add(NewMarker, DistanceText);
96 }
97
98 Markers.Add(NewMarker);
99
100 return NewMarker;
101 }
102
103 return nullptr;
104}
TArray< UImage * > Markers
TMap< UImage *, class UTextBlock * > MarkerDistanceMap
마커별 거리 텍스트 매핑
class UCanvasPanel * Pnl_Compass
UTexture2D * GetTextureForMarkerType(ECompassMarkerType MarkerType)

다음을 참조함 : GetTextureForMarkerType(), MarkerDistanceMap, Markers, Pnl_Compass.

다음에 의해서 참조됨 : APlayerActor::UpdateCompassMarkers().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetTextureForMarkerType()

UTexture2D * UCompassWidget::GetTextureForMarkerType ( ECompassMarkerType  MarkerType)

CompassWidget.cpp 파일의 106 번째 라인에서 정의되었습니다.

107{
108 UTexture2D** FoundTexture = MarkerTextureMap.Find(MarkerType);
109 if (FoundTexture && *FoundTexture)
110 {
111 return *FoundTexture;
112 }
113
114 return LoadObject<UTexture2D>(nullptr, TEXT("/Game/StarterBundle/Image/mark1.mark1"));
115}
TMap< ECompassMarkerType, UTexture2D * > MarkerTextureMap

다음을 참조함 : MarkerTextureMap.

다음에 의해서 참조됨 : AddCompassMarker(), APlayerActor::UpdateCompassMarkers().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NativeConstruct()

void UCompassWidget::NativeConstruct ( )
overrideprotectedvirtual

CompassWidget.cpp 파일의 11 번째 라인에서 정의되었습니다.

12{
13 Super::NativeConstruct();
14
15 if (MarkerTextureMap.Num() == 0)
16 {
18 LoadObject<UTexture2D>(nullptr, TEXT("/Game/CustomContents/UI/Texture/Resource/Icon_Listen.Icon_Listen")));
20 LoadObject<UTexture2D>(nullptr, TEXT("/Game/StarterBundle/Image/mark1.mark1")));
22 LoadObject<UTexture2D>(nullptr, TEXT("/Game/CustomContents/UI/Texture/Resource/Icon_Whitney.Icon_Whitney")));
24 LoadObject<UTexture2D>(nullptr, TEXT("/Game/CustomContents/UI/Texture/Resource/resource_score.resource_score")));
26 LoadObject<UTexture2D>(nullptr, TEXT("/Game/CustomContents/UI/Texture/Resource/Icon_Overall.Icon_Overall")));
28 LoadObject<UTexture2D>(nullptr, TEXT("/Game/CustomContents/UI/Texture/Resource/Icon_RedOwl.Icon_RedOwl")));
29 }
30}

다음을 참조함 : FinalResult, MarkerTextureMap, OtherPlayer, QuestEnd, QuestStart, Teleporter, Wheatly.

◆ RotateCompass()

void UCompassWidget::RotateCompass ( float  ZRotation)

CompassWidget.cpp 파일의 32 번째 라인에서 정의되었습니다.

33{
34 FVector2D DesiredSize = Img_Compass->GetDesiredSize();
35
36 UCanvasPanelSlot* CanvasSlot = Cast<UCanvasPanelSlot>(Img_Compass->Slot);
37 if (CanvasSlot)
38 {
39 float PositionX = -ZRotation * (DesiredSize.X / 360.f);
40 CanvasSlot->SetPosition(FVector2D(PositionX, 0.f));
41 }
42}
class UImage * Img_Compass

다음을 참조함 : Img_Compass.

다음에 의해서 참조됨 : APlayerActor::Tick().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetMarkerDistance()

void UCompassWidget::SetMarkerDistance ( UImage *  InMarker,
float  Distance 
)

마커 거리 설정 (미터 단위)

CompassWidget.cpp 파일의 168 번째 라인에서 정의되었습니다.

169{
170 if (UTextBlock** FoundText = MarkerDistanceMap.Find(InMarker))
171 {
172 // 거리를 미터 단위로 변환 (언리얼은 센티미터 단위)
173 float DistanceInMeters = Distance / 100.f;
174
175 FString DistanceStr;
176 if (DistanceInMeters >= 1000.f)
177 {
178 // 1km 이상이면 km 단위로 표시
179 DistanceStr = FString::Printf(TEXT("%.1fkm"), DistanceInMeters / 1000.f);
180 }
181 else
182 {
183 // 1m 이상이면 m 단위로 표시
184 DistanceStr = FString::Printf(TEXT("%.0fm"), DistanceInMeters);
185 }
186
187 (*FoundText)->SetText(FText::FromString(DistanceStr));
188 }
189}

다음을 참조함 : MarkerDistanceMap.

다음에 의해서 참조됨 : APlayerActor::UpdateCompassMarkers().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetMarkerPosition()

void UCompassWidget::SetMarkerPosition ( UImage *  InMarker,
float  TargetRotation,
bool  bSideLock 
)

CompassWidget.cpp 파일의 117 번째 라인에서 정의되었습니다.

118{
119 float CompassSize = Img_Compass->GetDesiredSize().X;
120 float MarkerRotation = TargetRotation * (CompassSize/360.f);
121
122 UCanvasPanelSlot* MarkerSlot = Cast<UCanvasPanelSlot>(InMarker->Slot);
123 if (MarkerSlot)
124 {
125 FVector2D FinalPosition = FVector2D::ZeroVector;
126
127 if (!bSideLock)
128 {
129 FinalPosition = FVector2D(MarkerRotation, 0.f);
130 MarkerSlot->SetPosition(FinalPosition);
131 }
132 else
133 {
134 UCanvasPanelSlot* CompassSlot = Cast<UCanvasPanelSlot>(Pnl_Compass->Slot);
135 if (CompassSlot)
136 {
137 float PositionX = (CompassSlot->GetSize().X / 2);
138
139 if (FMath::Abs(MarkerRotation) < PositionX)
140 {
141 FinalPosition = FVector2D(MarkerRotation, 0.f);
142 }
143 else if (MarkerRotation > PositionX)
144 {
145 FinalPosition = FVector2D(PositionX, 0.f);
146 }
147 else
148 {
149 FinalPosition = FVector2D(-PositionX, 0.f);
150 }
151
152 MarkerSlot->SetPosition(FinalPosition);
153 }
154 }
155
156 // 거리 텍스트도 같이 이동
157 if (UTextBlock** FoundText = MarkerDistanceMap.Find(InMarker))
158 {
159 UCanvasPanelSlot* TextSlot = Cast<UCanvasPanelSlot>((*FoundText)->Slot);
160 if (TextSlot)
161 {
162 TextSlot->SetPosition(FVector2D(FinalPosition.X, -5.f)); // 마커 위에 배치
163 }
164 }
165 }
166}

다음을 참조함 : Img_Compass, MarkerDistanceMap, Pnl_Compass.

다음에 의해서 참조됨 : APlayerActor::UpdateCompassMarkers().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetMarkerVisibility()

void UCompassWidget::SetMarkerVisibility ( UImage *  InMarker,
ESlateVisibility  InVisibility 
)

마커와 거리 텍스트의 Visibility 동시 설정

CompassWidget.cpp 파일의 191 번째 라인에서 정의되었습니다.

192{
193 if (InMarker)
194 {
195 InMarker->SetVisibility(InVisibility);
196 }
197
198 // 거리 텍스트도 같은 Visibility 적용
199 if (UTextBlock** FoundText = MarkerDistanceMap.Find(InMarker))
200 {
201 if (*FoundText)
202 {
203 (*FoundText)->SetVisibility(InVisibility);
204 }
205 }
206}

다음을 참조함 : MarkerDistanceMap.

다음에 의해서 참조됨 : APlayerActor::UpdateCompassMarkers().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ Img_Compass

class UImage* UCompassWidget::Img_Compass

CompassWidget.h 파일의 37 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : RotateCompass(), SetMarkerPosition().

◆ MarkerDistanceMap

TMap<UImage*, class UTextBlock*> UCompassWidget::MarkerDistanceMap

마커별 거리 텍스트 매핑

CompassWidget.h 파일의 50 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddCompassMarker(), SetMarkerDistance(), SetMarkerPosition(), SetMarkerVisibility().

◆ Markers

TArray<UImage*> UCompassWidget::Markers

CompassWidget.h 파일의 43 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddCompassMarker().

◆ MarkerTextureMap

TMap<ECompassMarkerType, UTexture2D*> UCompassWidget::MarkerTextureMap

CompassWidget.h 파일의 46 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : GetTextureForMarkerType(), NativeConstruct().

◆ Pnl_Compass

class UCanvasPanel* UCompassWidget::Pnl_Compass

CompassWidget.h 파일의 34 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddCompassMarker(), SetMarkerPosition().


이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: