VS๋ก Development Editor ๋๋ฒ๊น ํ์ ๋๋ Development ๋ก ๋๋ฒ๊น ํ์ ๋ ์งํ๋๋ ์์๊ฐ ๋ค๋ฆ ๋๋ค.
๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ์๋ฉด
Game Instance - Game Manager - Player Manager - Player
Game Instance - Game Manager - Player Managerย -ย Input Actor
์ด๋ ๊ฒ ๋ค์ด๊ฐ๋๋ฐ Player๋ AIController ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Character Controller ์ ๋น์ ๋ฐ๋ Input Actor ๊ฐ ํ๋ ๋ ์์ต๋๋ค.
Default Pawn Class๋ Input Actor ๋ก ์ง์ ์ด ๋์ด์๊ณ ๊ฐ ์ค๋ธ์ ํธ์ ์์ฑ ์๊ธฐ๋
Game Manager : Game Instance์ Init() ํจ์
Player Manger : Game Manager์ PostInitializeComponents() ํจ์
Player : Player Manager์ PostInitializeComponents() ํจ์
์ ๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด Input Actor์ BeginPlay() ํจ์์์
FAttachmentTransformRules rule(EAttachmentRule::KeepRelative, false);
AttachToActor(Cast<UDHGameInstance>(GetGameInstance())->GetGameManager()->GetPlayerManager()->GetPlayer(), rule);
์ ์ฝ๋๊ฐ ๋ฌธ์ ๊ฐ ๋๋๋ฐ ์๋ํฐ์์๋
Game Manager์ PostInitializeComponents() -> Player Manager์ PostInitializeComponents() -> Player Manager์ PostInitializeComponents() -> Input Actor์ BeginPlay()
์์๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ Development๋ก ๋ง์ถฐ ๋์ ํ ๋๋ฒ๊น ์ ์งํํ๋ฉด ๋ชจ๋ PostInitializeComponents() ํจ์๋ฅผ ๊ฑด๋๋ฐ๊ณ Input Actor์ BeginPlay()๋ก ๋์ด๊ฐ๋ฒ๋ฆฌ๋ฉด์ ์ด๊ธฐํ ๋์ง ์์ Player๋ฅผ ์ฐธ์กฐํ๋ฉฐ ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ ๋ฐ๋ก ์ข ๋ฃ๋ฉ๋๋ค.
์กํฐ์ ์์ฑ ์๊ธฐ๋ฅผ ์๋ชป ์ก์ ๊ฑด๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ์ ์๋ํฐ์์๋ ์ ์์ ์ผ๋ก ์๋ํ๋๊ฑด๊ฐ์? ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์กํฐ์ ์์ฑ ์๊ธฐ๊ฐ ์๋ชป ๋์๋ค๋ฉด ์ด๋ ๋จ๊ณ์์ ์กํฐ๋ฅผ ์์ฑํด์ผํ๋์?
์ถ๊ฐ๋ก ์ด๊ฒ์ ๊ฒ ๋ง์ ธ๋ณด๋๊น ์์ PostInitializeComponents ํจ์๊ฐ ํธ์ถ์ด ์๋๋ ๊ฒ์ผ๋ก ํ์ ๋์๋๋ฐ ์ ๊ทธ๋ด๊น์?
๋ด ์๊ฐ์๋ Input Actor ๋ ๊ฒ์ ๋ชจ๋์์ ๋ณ๋๋ก ์์ฑ์ ํ๊ธฐ ๋๋ฌธ์ ์์ ๋งค๋์ ๋ค ๋ณด๋ค ๋จผ์ ์์ฑ๋์ BeginPlay ๊ฐ ํธ์ถ๋๋๊ฑฐ ๊ฐ์. ํฑ์ด๋ ํ์ด๋จธ๋ก ์ง์ฐ์ํค๋๊ฑฐ ์ธ์ ๋ญ๊ฐ ๊น๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ ์ค๋ฅด๋ค.
์ง์ฐ์์ผ์ ๊ฒ์ ์คํ ์ ์์ ์ผ๋ก ์คํ๋จ๊ณ๊น์ง ์์๋ก ๋ณด๋๋๋ฐ PostInitializeComponents์ ์ค๋จ์ ์ฐ์ด ๋จ๋๋ฐ ํธ์ถ์ด ์์ ์๋๋๋ผ๊ตฌ์
๋งค๋์ ๋ค์ ์คํฐ์ด ์คํจํ๊ฒ ์๋๊น? PostInitializeComponent ๋ ๋ฌด์กฐ๊ฑด ํธ์ถ ๋๋ ํจ์ ๊ฐ์๋ฐ. ๋ชจ๋ฅด๊ฒ ๋ค
GameInstance ์์ Game Manager๋ฅผ SpawnActor() ํจ์๋ก ์ ์์ ์ผ๋ก ์์ฑํ๋ ๊ฒ ๊น์ง๋ ํ์ธ ํ๋๋ฐ ๊ทธ ์ดํ์ Game Manager์ PostIntializeComponents() ํจ์์์ Player Manager๋ฅผ ์์ฑํด์ผํ๋๋ฐ PostInitializeComponents๊ฐ ํธ์ถ๋์ง ์์์ Player Manager ๋ถํฐ๋ ์ ์์ ์ผ๋ก ์์ฑ์ด ์๋๊ณ ์๋ ๊ฒ ๊น์ง๋ ํ์ธํ์ต๋๋ค
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Actors/ActorLifecycle/
์๋ช
์ฃผ๊ธฐ ๋ฌธ์๋ฅผ ๋ด๋ ํจ์๊ฐ ํธ์ถ๋์ผ ํ๋๋ฐ ์ด์ํ๋ค.
์๋ํฐ์์๋ ์๋๋ฉด ์ฝ๋๋ฅผ ๋ฏ์ด ๊ณ ์ณ๋ณด๊ฒ ๋๋ฐ ๊ทธ๋ฐ ๊ฒ๋ ์๋๋ผ ์ ํ ๋ชจ๋ฅด๊ฒ ๋ค์ ใ ใ ใ ..
๋ค ํ๋ก์ ํธ์ ๋ฌธ์ ๊ฐ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ผ๋ก ํ ์คํธ ํด๋ ์๋จ. ํด๋น ํจ์๊ฐ ํธ์ถ๋์ง ์๋ ๊ฒฝ์ฐ๋ ์๋๊ฐ ์ ๋๋ก ๋ก๋๋ ์ง ์๋ ๊ฒฝ์ฐ์ธ๋ฐ Develoment ๋ ์๋ํฐ๊ฐ ์๋๋ผ ๊ฒ์ ์คํ ํ์ผ ์ด๋ผ์ ํจํค์ง๋ ์์ ๋ค์ด ํ์ํ๊ฒ ์๋๊น ์์ฌ๋จ. ์ง๊ธ ํ ์คํธ ์ค.
๊ธ์จ๊ฐ ์งค๋ ธ๋ค. ๋คํ๋ก์ ํธ์ ๋ฌธ์ ๊ฐ ์๋๋ผ
https://answers.unrealengine.com/questions/190542/crash-on-spawnactor-in-gameinstance-event-init.html
์ฌ๊ธฐ์ ๋ต์ ์ฐพ์๋ค์ GameInstance์ Init() ํจ์์์ Game Manager ๋ฅผ ์์ฑํ๋ฉด์ ์๊ธด ๋ฌธ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค
์ด๋ฐ๊ฑด ๋ ์ฒ์ ์์๋ค์
Development ๋ ์๋ํฐ๊ฐ ์๋ ๊ฒ์ ์คํํ์ผ์ ์์ฑํ๋ ๊ฑฐ๋ผ์ ํจํค์ง๋ ๊ฒ์ ์์ ์ ํ์๋ก ํ๋๊ฑฐ ๊ฐ์. ์ธ๋ฆฌ์ผ ์๋ํฐ ์ด์ด์ File -> Package Project -> Windows (64bit) ๋๋ฌ์ ๊ธฐ๋ณธ์ผ๋ก ์ด๋ ค์๋ ํ์ฌ ํ๋ก์ ํธ ํด๋ ๋ฅผ ์ ํํด์ ํจํค์งํ๊ณ ๋ค์ ๋๋ฒ๊น ํด๋ด. ๊ธฐ๋ณธ ํ ํ๋ฆฟ ํ๋ก์ ํธ๋ก ํ ์คํธ ํด๋ณด๋๊น ์ด๋ ๊ฒ ํ๋ฉด ๋๋ค
์ ์ ๋ฐ ๋ฌธ์ ๊ฐ ์์๊ตฐ. ๋กํ!
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๋ฐฉ๊ธ ์ ๋ GameInstanace๊ฐ ์๋ํฐ์ผ ๋ ๋ค๋ฅด๊ฒ ์๋ํ๋๊ฑธ ์ฐพ์๋ค์ SpawnActor๋ฅผ GameInstance์ ๋ค๋ฅธ ํจ์๋ก ๋นผ๊ณ Default Pawn Class ์์ ํธ์ถํด์ ํด๊ฒฐํ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค