์ฃผ๋ก ์ ๋ํฐ ์์ง ์ฐ๊ณ ย ์ธ๋ฆฌ์ผ์ ์ด์ ๋ง ๊ฐ์ ๋ค์ผ๋ฉด์ ๊ณต๋ถํ๋ ๋ด๋น์
์ธ๋ฆฌ์ผ C++์์ UWorld ๋ฌธ์๋ฅผ ๋ดค๋๋ฐ ์๋๊ฐ ์ฃผ๋ก ํ๋ ๋ ๋ฒจ ๊ด๋ฆฌ ๋ง๊ณ ๋ ๋ ์ด์บ์คํ ์ด๋ ์ฝ๋ฆฌ์ ๊ณผ ๊ฐ์ ํจ์๋ค๋ ์๊ณ
๊ทธ๋ฉ ๊ธฐ๋ฅ ๊ตฌํ ๋๋ฌธ์ ๋ ์ด์บ์คํ ์ ์ฐ๋ ค๋๋ฐ UWorld์์ ๊ฐ๊ณ ์ค๋๊ฑฐ ๋ณด๊ณ ์ ๋ํฐ๋ ๋ค๋ฅธ ์ ์ ์ข ๋ง์ด ๋๊ผ์
์ด๊ฑฐ ๋ณด๋ฉด์ ๊ถ๊ธํ ๊ฒ๋ค์ด ์์๋๋ฐ ๋ฌผ์ด๋ณผ๋ฐ๊ฐ ์์ด์ ์ฌ๊ธฐ๋ค ์ง๋ฌธํจ.
1. ์์ UWorld์ ๊ฐ์ด ์์ฒญ ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ํผ ํด๋์ค๋ค์ด ๋ ์์? ์๋ค๋ฉด ์ด๋ค ์ข ๋ฅ๊ฐ ์๊ณ ์ ์ด๋ ๊ฒ ์ฑ๊ธํด ์ํผ ํด๋์ค ์์ ๊ธฐ๋ฅ์ ๋ชฐ์๋ฃ๋๊ฑฐ์?
2. ์ธ๋ฆฌ์ผ์ ์กํฐ ์๋ช ์ฃผ๊ธฐ๋ ์ ๋ํฐ์ ์กํฐ ์๋ช ์ฃผ๊ธฐ์ ๋ค๋ฅด๊ฒ Tick(Update)๋ถ๋ถ์ด ์ธ๋ถํ๋์ด์์ง ์๊ณ ์คํ๋ ค BeginPlay(Start)์ ์ด๋ EndPlay ํ๊ฐ ๋งค์ฐ ์ธ๋ถํ๋์ด ์๋ ๊ฒ ๊ฐ์. ์กํฐ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๊ฐ๊ฐ ์ด๋ค ์ผ์ ํ๋์ง, ์ ๋ํฐ์ ์กํฐ์ ์๋ช ์ฌ์ฉ ๋ฐฉ์์ ์ฐจ์ด์ ์ ์๊ณ ์ถ์.
3. ์ธ๋ฆฌ์ผ ์์ง์ ๊ณต๋ถํ๋ฉด์ ํด๋์ค๋ ๋ธ๋ฃจํ๋ฆฐํธ๋ฅผ ์๋ก ๋ง๋ค ๋ ๋ถ๋ชจ ํด๋์ค ์ ํ์ฐฝ์์ ๋ชจ๋ ํด๋์ค ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ณ์ฒ์ง๊ฐ ๋ณด์ด๋๋ฐ ์ด๊ฒ๋ค์ ์ ๋ฆฌํด๋ ๋ฌธ์๊ฐ ์์? ์ด๊ฒ๋ค์ ์์ฃผ ์ฐ๊ธด ํจ?
์ธ๋ฆฌ์ผ ์์ง ์ฌ๋ฐ๋๋ฐ ์ด๋ ต๋ค.
๊ฑ ๋๋ถ๋ถ ํด๋์ค๊ฐ ๊ธฐ๋ณธ๋ด์ฅ๊ธฐ๋ฅ์ด ๋ฐ๊ธ๋ฐ๊ธํด
์๋ธํด๋์ค๋ค
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Subsystems/
singleton์
๊ธฐ๋ณธ๊ธฐ๋ฅ์ ์๋๋ฐ ์ ๋ฐ ์ ๋๋ด์์ ์จ๋จน๊ธฐํธํ์์คํ ์ด๊ณ
playercontroller
actor
world๋ ๋ฉํฐํ๋ ์ด์์ ์๋ฒ๊ฐ ํ์ฌ๋ ๋ฒจ์์๋ง ๊ฐ์ ธ์ผํ๋๋ฐ์ดํฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋์ถฉ ๋ญ์์์ง ๋๋์ก๊ธฐ ์ฌ์ ๋ฉํฐํ๋ ์ด๋๋ฌธ์ ๊ณ ๋ ค๋ ์์๊ฐ ๋ง์์, ๊ทธ๊ฑฐ ๋นผ๊ณ ์๊ฐํ๋ฉด ์ดํด์๊ฐ๋๋ถ๋ถ์ด ๋ง์์
ใณใณ ์ ๋ํฐ๋ ์ต์์ํด๋์ค์ธ ์ค๋ธ์ ํธ๋ ์ปดํฌ๋ํธ๊ฐ์๊ฑฐ์ ๊ธฐ๋ณธ๋ด์ฅ๊ธฐ๋ฅ์ด ๊ฑฐ์ ์๋๋ฐ ์ธ๋ฆฌ์ผ์ ๋ฐ๋๊ตฌ๋
์กํฐ ์๋ช ์ฃผ๊ธฐ๋ ๋ธ๋ก๊ทธ ๊ฐ์๋ฐ์ ์ฐพ์๋ณผ๊ฒ
1. UWorld๋ ๊ตณ์ด ๋ฐ์ง์๋ฉด ์ฑ๊ธํค์ ์๋. ๊ทธ๋ฅ ํ๋์ ์ขํ๊ณ๋ฅผ ์ ์งํ๋, ์ฌ๋ฌ ์กํฐ๋ค์ ์์ ํ ์ ์๋ ๊ฐ์ฒด๋ผ๊ณ ๋ณด๋๊ฒ ๋ง๋๋ฏ
์ง์ ํ ์๋ฏธ์ ์ฑ๊ธํค์ UGameInstance๋ผ๊ณ ๋ณด๋๊ฒ ๋ง๋๋ฏ. ๊ธฐ๋ฅ์ ๋ชฐ์๋ฃ์๋ค๊ธฐ๋ณด๋ค UWorld๊ฐ ์ผ์ข ์ ๋งฅ๋ฝ์ผ๋ก์จ ์ฐ์ธ๋ค๊ณ ๋ณด๋ฉด ๋จ.
์ค์ ๋ก ์ฌ๋ฌ UWorld๊ฐ ์กด์ฌํ ์ ์์ด์
2. ์๋ช ์ฃผ๊ธฐ๋
https://docs.unrealengine.com/5.3/ko/unreal-engine-actor-lifecycle/
์ ์ ์ค๋ช ๋์ด์์.
3. ์๋ํฐ์์ UObject๋ฉด ๊ทธ๋ฅ ์ ๋ถ ๋ค ์์ ๋ฐ์ ์ ์์ํ ๋ฐ ์๋ ์ข ๋ฅ๊ฐ ๋ง์์ ๋ค ์ค๋ช ํ ์๋ ์์. ์์ฃผ์ฐ๋ ์ ๋ค์ด ์๊ณ ์์ฃผ ์ ์ฐ๋ ์ ๋ค์ด ์์
UActorComponent::GetWorld()๋ก UWorld์ ์ฃผ์๋ฅผ ๊ฐ๊ณ ์ค๋๋ฐ, ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ์กํฐ ์ปดํฌ๋ํธ๋ค์ UWorld์ ์ฃผ์๋ฅผ ๊ฐ๊ณ ์๋๊ฑฐ์ผ?
์ธ๋ฆฌ์ผ์ ์ฅ์ ์ด์ ์ธ๋ฆฌ์ผ ๊ฐ๋ฐ์์ ํ์ ์์์ค ํ๋๊ฐ ์์ค๋ฅผ ๋ณด๋๊ฑฐ์.. UActorComponent::GetWorld() ํจ์์ ์์ค๋ฅผ ๋ฐ๋ก ํ์ธํด ๋ณด๋ฉด ๋๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์กํฐํํ ์ ๊ฐ์ ธ์ค๋๋ฐ ๋ง์ฝ ์์ผ๋ฉด ์๊ธฐ Outer๋ก ๋ถํฐ ์ป์ผ๋ ค๊ณ ํ๋๋ฏ?
์ ์๋ฅผ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด ์ฃผ์ธ ์กํฐ์ World๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ๊ณ ์์ผ๋ฉด UObject์ GetOuter๋ฅผ ํ์ฉํ๋๋ฏ
https://github.com/EpicGames/UnrealEngine/blob/5ccd1d8b91c944d275d04395a037636837de2c56/Engine/Source/Runtime/Engine/Private/Components/ActorComponent.cpp
ใ ใ ์ธ๋ฆฌ์ธ์ ์คํ์์ค์ง..์๋ ค์ค์ ๊ณ ๋ง์