๋ํ๋จผํธ ์ฝ์ด๋ณด๋ ๋ ๋ฒจ ๋ก๋ ์ BeginPlay๊ฐ ํธ์ถ๋๋ค ๋ผ๊ณ ์ฐ์ฌ์๋๋ฐ
๊ทธ๋ผ ๊ทธ ์๋์ ์กด์ฌํ๋ ๋ชจ๋ ์กํฐ์ BeginPlay๊ฐ ํ ํ๋ ์ ๋ด์ ๋ชจ๋ ์คํ๋๋๊ฑฐ์?
๊ทธ๋ฌ๋ฉด ๊ทธ BeginPlay๋ค์ดย ํธ์ถ๋๋ ์์๋ ์ด๋ป๊ฒ ๋๋๊ฑฐ์ง? ์๋ ํ์ด์ด๋ผํค ์์๋๋ก ์คํ๋๋?
์ด๋ฐ๊ฒ ์๊ถ๊ธํ์ง? ์ ๊ถ๊ธํ๋ฉด ์ง์ ํ ์คํธ ์ถ๋ ฅ ํด๋ณด๋ฉด ๋์๋
์์ค์ฝ๋ ๋ถ์ํด๋ณด๋ฉด ํด๋น๋ ๋ฒจ์ ์๋ ์กํฐ์ BeginPlay๋ ๋ชจ๋ ์์๋๋ก ์คํํจ. ์์๋ ์์ธกํ ์์์.
์ค์ ๋ก ์์์ ๊ธฐ๋ฐํ ๋์์ด ํ์๋ก ํ๋ค๋ฉด BeginPlay์์ ๋๊ฐ ํธ์ถํ ์กํฐ๋ฅผ ์ฐพ์์ ์ง์ ํธ์ถํ๋ ๋ฐฉ๋ฒ๋ฐ์ ์์.
parent actor๊ฐ ์์ผ๋ฉด parent ์คํ์ด ๋จผ์ ๋ณด์ฅ๋จ.
๋ง์ด ์ด์ํ๋ค. parent๊ฐ ๋จผ์ ์คํ๋๋๊ฒ ๋ณด์ฅ๋จ
bool bRunBeginPlay = !bDeferBeginPlayAndUpdateOverlaps && (BeginPlayCallDepth > 0 || World->HasBegunPlay()); if (bRunBeginPlay) { if (AActor* ParentActor = GetParentActor()) { // Child Actors cannot run begin play until their parent has run bRunBeginPlay = (ParentActor->HasActorBegunPlay() || ParentActor->IsActorBeginningPlay()); } }
์ฝ๋๊ฐ ์กด๋ ์ข๋๋ก์ void AWorldSettings::NotifyBeginPlay(){ UWorld* World = GetWorld(); if (!World->bBegunPlay) { for (FActorIterator It(World); It; ++It) { SCOPE_CYCLE_COUNTER(STAT_ActorBeginPlay); const bool bFromLevelLoad = true; It->DispatchBeginPlay(bFromLevelLoad); } World->bBegunPlay = true; }๋ ๋ฒจ์์ ์ด๋ฏธ spawn๋์ด ์๋ ์ ๋ค์ ๊ทธ๋ฅ Actor ๋ฑ๋ก์์๋๋ก ๋๋ฆผ. ๊ทธ๋ฌ๋๊น ์ ์ด์ ์์กด์ฑ์๋ ์ฝ๋๋ฅผ BeginPlay์ ์ฐ๋ฉด ์๋จ