104{
105 bOutSpawned = false;
106
107 if (InWorld == nullptr)
108 {
110 return nullptr;
111 }
112
113 APlayerController* PC = InWorld->GetFirstPlayerController();
114
115 if (PC == nullptr)
116 {
117 LOG_ERROR(LogCK,
"PlayerController를 찾을 수 없습니다.");
118 return nullptr;
119 }
120
121 APawn* ExistingPawn = PC->GetPawn();
122
123 if (ExistingPawn)
124 {
125 return ExistingPawn;
126 }
127
128 AGameModeBase* GameMode = InWorld->GetAuthGameMode();
129
130 if (GameMode == nullptr)
131 {
132 LOG_ERROR(LogCK,
"GameMode를 가져올 수 없어 플레이어 Pawn을 스폰할 수 없습니다.");
133 return nullptr;
134 }
135
136 GameMode->RestartPlayerAtTransform(PC, SpawnTransform);
137 APawn* NewPawn = PC->GetPawn();
138
139 if (NewPawn == nullptr)
140 {
141 LOG_ERROR(LogCK,
"플레이어 Pawn 스폰에 실패했습니다.");
142 return nullptr;
143 }
144
145 bOutSpawned = true;
146
147 UGameInstance* GameInstance = InWorld->GetGameInstance();
148
149 if (GameInstance == nullptr)
150 {
151 LOG_WARNING(LogCK,
"GameInstance가 유효하지 않아 PlayerManagementSubsystem에 스폰을 알릴 수 없습니다.");
152 return NewPawn;
153 }
154
155 ULocalPlayer* LocalPlayer = GameInstance->GetFirstGamePlayer();
156
157 if (LocalPlayer == nullptr)
158 {
159 LOG_WARNING(LogCK,
"LocalPlayer가 유효하지 않아 PlayerManagementSubsystem에 스폰을 알릴 수 없습니다.");
160 return NewPawn;
161 }
162
164 {
165 PlayerManagement->HandlePlayerSpawn(NewPawn, LevelAssetID, InWorld);
166 }
167 else
168 {
169 LOG_ERROR(LogCK,
"PlayerManagementSubsystem을 가져올 수 없습니다.");
170 }
171
172 return NewPawn;
173}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
Definition PlayerManagementSubsystem.h:42