๋ฆฌํ๋ ์ ์ด ๋ญ์ง ์ฒ์ ์์๋ ๋
์์ ๊ธ์์ Actor๋ฅผ ์์ฑํ๋ฉด generated.h
๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๊ฐ๋์ด์๋ค๊ณ ํ๋ค.
ํด๋น ํค๋๋ ๋ฆฌํ๋ ์
๊ธฐ๋ฅ์ด ๊ฐ๋ฅํ๋๋ก ๋ฆฌํ๋ ์
๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค.
๊ทธ ๋ฆฌํ๋ ์ ์ด ๋ญ์ง ์ ํํ ์์๋ณด์
4๊ฐ์ง์ ๊ธ์ ์ฐธ๊ณ ํ์๋ค.
๋ฆฌํ๋ ์ ์ ํ๋ก๊ทธ๋จ์ด ์คํ์๊ฐ์(RunTime) ์๊ธฐ ์์ ์ ์กฐ์ฌํ๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ๋ค.
(์ธ๋ฆฌ์ผ ๊ณต์ ์ฌ์ดํธ)
์์ฒ๋ผ ์ปดํ์ผํ์์๋ ์ค์ ํ์ ์ ๋ชจ๋ฅด๋ ๊ฐ์ฒด๊ฐ ์ฃผ์ด์ ธ๋
๋ฐํ์์ ํด๋น ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ ๊ทผํ ์ ์๋ค.
(C#์ฉ ์ฝ๋์ด๊ณ , Object๋ ์ต์์ํด๋์ค๋ผ์ ์ด๋ค๊ฐ์ฒด์ธ์ง ๋ชจ๋ฅด๋ ๊ฒ๊ณผ ๊ฐ๋ค)
ํ๋กํผํฐ ์์คํ
์ผ๋ก ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.๊ฒ์์๋ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋๋๋ฐ ์ปดํ์ผํ์์๋ ํด๋น ๋ชจ๋์ ์กด์ฌ๋ฅผ ์๋ก ์ ์ ์์ผ๋ฏ๋ก,
๋์ ์ธ ํ์
์ ์ฌ์ฉํ๋ฉด ๋ง์ปค๋ ๋ฐํ์์์ ํด๋น ํด๋์ค๊ฐ ๋ฌด์์ธ์ง ํ์ธํ ์ ์๊ฒ ๋๋ค.
๋ด๊ฐ ์ ์๊ธ์ ์ฐธ๊ณ
https://velog.io/write?id=1251400e-46a4-4c5c-b193-d9955cc503e3
๋ฆฌํ๋ ์
์ด ์๋ ์ ํ์ผ๋ก ๋งํน์ ํ๋ ค๋ฉด
ํ์ผ ์๋จ์ generated.h
๋ฅผ ์ถ๊ฐํด์ ๋งํนํด์ค๋ค.
๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ generated.h
๊ฐ ๋ถ์
๋ฆฌํ๋ ์
์ด ์๋ ์ ํ์ ํด๋น ํ์ผ์ ๊ณ ๋ คํด์ผํ๋ ๊ฒ๊ณผ
์์คํ
๊ตฌํ์๋ ํ์ํจ์ UHT์ ์๋ ค์ค๋ค.
(unreal header tool)
generated.h
๊ฐ ์ถ๊ฐ๋์์ผ๋,
UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY()
๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
#include "StrategyChar.generated.h"
UCLASS(Abstract)
class AStrategyChar : public ACharacter, public IStrategyTeamInterface
{
GENERATED_UCLASS_BODY()
UPROPERTY(EditAnywhere, Category = Pawn)
int32 ResourcesToGather;
uint8 MyTeamNum;
}
๊ฐ๋จํ ์์๋ฅผ ๊ฐ์ ธ์๋ค.
generated์ ์ ์๋ ๋งคํฌ๋ก
๋ค์ด๊ฐ์ง ์๋๋ค๋ฉด ๋ฆฌํ๋ ์
์ ์ฐ๊ฒ ๋ค๊ณ ์ ์ธ์ ํ๋๋ฐ ์ค์ ๋ก ๋ฆฌํ๋ ์
์ ํ์ง ์๋ ๊ผด์ด ๋๋ค
๊ฒฐ๋ก
generated.h๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํ๋ ์ ์ด ์๋ ์ ํ์์ ์๋ฆฐ๋ค.generated.h๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํ๋ ์ ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๊ณ ,
UObject๋ฅผ ์์๋ฐ๋ CLASS์
UCLASS()์ GENERATED_UCLASS_BODY()๋ฅผ ์ฌ์ฉํ์ฌ
UCLASS()๋ ๋ฆฌํ๋ ์ ๋ ํด๋์ค ๋ด๋ถ์ ๋ฆฌํ๋ ์ ํค์๋๊ฐ ๋ถ์
๋ฉค๋ฒํจ์, ๋ณ์๋ค์ ๋ฆฌํ๋ ์ ๋ฐ์ดํฐ์ ๋ฃ๋๋ค.์ต์ข ์ ์ผ๋ก BP์ UE editor์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์ ๋ง ๊ฐ์ฅ ์ค์ํ ๊ฒ์..
UObject๊ฐ์ฒด๋ผ๋ฉด, ๋ฌด์กฐ๊ฑด generated.h / UCLASS / ๊ทธ๋ฆฌ๊ณ U์ ๋์ฌ / UObject์ ์์ / GENERATED_BODY()
์ด 5๊ฐ๊ฐ ๋ฌด์กฐ๊ฑด ํฌํจ๋์ด์์ด์ผ ํ๋ฏ๋ก,
UObject๋ ๋ฌด์กฐ๊ฑด ๋ฆฌํ๋ ์ ์ด ๋๋ค๊ณ ๋ณด๋๊ฒ์ด ๋ง๋ค.
+ Enum / Struct
- UObject๊ฐ ์๋์ง๋ง ๋ฆฌํ๋ ์ ์ ์ ๊ณตํ๋ค.
- ์ถ๊ฐ๋ก ์ธ๋ฆฌ์ผ์ CPP์ ๋ฌ๋ฆฌ ๊ตฌ์กฐ์ฒด์ ํด๋์ค๊ฐ ๋ค๋ฅด๊ณ ,
USTRUCT ๋ด์ UFUNCTION๊ฐ์ ํค์๋๋ฅผ ๋ฃ์ ์ ์๋ค.- ์ถ๊ฐ๋ก UENUM๊ณผ USTRUCT๋ ์ฃผ๋ก ๊ฐ์ผ๋ก ์ทจ๊ธํ๊ณ
๋ฆฌํ๋ ์ ํค์๋(๋งคํฌ๋ก)๋ฅผ ๋ถ์์์๋ GC์ ๋์์ด ๋์ง ์๋๋ค.
๊ทธ๋ฌ๋ฉด ํค์๋๋ฅผ ์ ๋ถ์ด๋๊ฑธ๊น
- ๊ทธ์ EDITOR๋ BP์์ ๊ด๋ฆฌํ๊ธฐ ํธํ๊ธฐ ์ํจ์ธ๋ฏ ์ถ๋ค.
1 -UBT(Unreal Build Tool)๋ ํค๋๋ฅผ ์ค์บํ ๋ค์
๋ฆฌํ๋ ์
๋ ์ ํ์ด ์ต์ ํ๋ ์๋ ํค๋๊ฐ ๋ค์ด์๋ ๋ชจ๋์ ๊ธฐ์ต.
2 -๊ทธ ํค๋ ์ค ์ด์ ์ปดํ์ผ ์ดํ ๋ณ๊ฒฝ๋์๋ค๋ฉด, UHT๋ฅผ ์คํํ์ฌ ๋ฆฌํ๋ ์
๋ฐ์ดํฐ
๋ฅผ ์์งํ๊ณ ์
๋ฐ์ดํธ.
3 -UHT ๋ ๋ฆฌํ๋ ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ C++ ์ฝ๋๋ฅผ ์์ฑ
4 -๋น๋ ์ ํด๋น ์ฝ๋์ ๊ฐ์ด ์ปดํ์ผ
[๊ณต์์ฌ์ดํธ์ ๊ธ์ ์์ฝํ ๊ธ - ๋ฆฌํ๋ ์ ์๋ ์๋ฆฌ]
๊ฒฐ๋ก
์... ๊ทธ๋ฅ ๊ทธ๋ฐ๊ฐ๋ณด๋ค ํ๊ณ ๋์ด๊ฐ๋ค.
์ค์ํ๊ฑด UBT์ UHT๊ฐ ๋ฆฌํ๋ ์
์ ํ์ด ์๋ ํค๋๋ฅผ ๊ฐ์ํ๊ณ ,
๋ฆฌํ๋ ์
๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ ํ๋ ๊ฒ์ด๋ค
CPP์์ ์๋์ผ๋ก Delete๋ฅผ ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ผ๋ง ํ๋๋ฐ
์ธ๋ฆฌ์ผ์์ UObject์ ๋ํด Reflection๊ธฐ๋ฅ์ ๋ฐํ์ผ๋ก GC๋ฅผ ์ ๊ณตํ๋ค.
UCLASS์ ๋ฉค๋ฒ ๋ณ์๋ค์ UPROPERTY๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํ๋ ์
์ ์ ์ฉ์ํค๊ณ ,
GC๋ฅผ ์ ์ฉ์ํค๊ฒ ๋๋๋ฐ
์ธ๋ฆฌ์ผ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ๋ ์๋ฃํ์ด ์๋,
UHT๊ฐ ๋ชจ๋ฅด๋ ์๋ฃํ์ ์ฌ์ฉํ๊ฑฐ๋, ์ค์ฒฉ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
UPROPERTY๋ฅผ ๋ถ์ด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ฐ ๊ฒฝ์ฐ, AddReferencedObject ํจ์๋ฅผ ์์ฑํ๊ณ ,
GC์๊ฒ ์ง์ ํด๋น ํฌ์ธํฐ์ ์ฃผ์๊ฐ์ ๋๊ฒจ์ฃผ๊ฒ ๋๋ค.
ํด๋น ํจ์๋ GC์ฌ์ดํด๋ง๋ค ํธ์ถ์ด ๋๋ค๊ณ ํจ.
C++ ๊ฐ์ฒด ๋ด์ UObject ํฌ์ธํฐ๊ฐ ์กด์ฌํ๋ฉด,
ํด๋น ๊ฐ์ฒด๊ฐ FGCObject๋ฅผ ์์ํ๊ฒ๋ ํ๋ค.๊ทธ๋ฌ๋ฉด AddReferencedObject๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๊ณ ,
UObjectํฌ์ธํฐ๋ฅผ GC์๊ฒ ์๋ ค์ค ์ ์๊ฒ ๋๋ค.๊ทธ๋ฐ๋ฐ, UObject๊ฐ ์๋ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด๋ผ๋ฉด..
AddRefer~ํจ์๋ฅผ ํตํด์ GC์ ์๋ ค์ค์ผ ํ๋ค๊ณ ๋ฐฉ๊ธ๋ดค๋๋ฐ
๋ชจ์๋๋ ๋ง ์๋๊ฐ..?
ํ ...
๋ฆฌํ๋ ์
๋ UObject Raw ํฌ์ธํฐ๋ ๊ฐํ ์ฐธ์กฐ?
๊ฐํ ์ฐธ์กฐ๋ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์ ๊ฐ์ฒด๊ฐ ํด์ ๋์ง ์์
(๋ถํ์ํ๊ฒ ์ด๋ฆฌ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ TWeakObjectPtr๋ฅผ ์ฌ์ฉ)
์ด๋ฅผ ์์น ์๋ ๊ฒฝ์ฐ์๋ TWeakObjectPtr์ ์ ๊ณตํ๋ค๊ณ ํจ
TWeakPtr์ด๋ ๋ค๋ฅด๋ค๊ณ ํจ
(์ํ์ฐธ์กฐ๋ฅผ ์์ ๊ธฐ ์ํ ์ฉ๋๊ฐ์๋?)
IsValid()๋ฅผ ํตํด ๊ฐ์ฒด๊ฐ ํด์ ๋์๋์ง ํ์ธํ๋ ๊ธฐ๋ฅ.
์ผ๋จ ์์ฝ๋ง ํด๋ณธ๋ค..
์ธ๋ฆฌ์ผ ์ค์ง์ Mark & Sweep์ผ๋ก ๊ด๋ฆฌ๋๋ UObject๊ฐ์ฒด์
New Delete / ์ฐธ์กฐ์นด์ดํฐ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋๋ NativeCPP๊ฐ์ฒด
2๊ฐ์ง๊ฐ ํผ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ ์ํด์ผ๋ง ํ๋ค๊ณ ํจ.
์๋ก ์ฐธ์กฐํ ๋๋ ์์ ์์๋ฅผ ์ฐธ๊ณ ํ๊ณ ,
UObject๊ฐ NativeCPP ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ์ฃผ์์ฌํญ์
UObject๊ฐ NativeCPP๋ฅผ ์์ ํ๋ ๊ฐ๋
์ด ๋์ด์
๊ณ์ ์ด์์๊ฒ ๋๋ค๊ณ ํจ
NativeCPP์ด UObject๋ฅผ ์ฐธ์กฐํ ๋
์ ๊น๋์ Root Set์ด ๋๋ ํจ๊ณผ๊ฐ ์์ด์
๋ด๊ฐ ํด์ ํ๋ฉด(๋์ํ๋ฉด) ์ฐธ์กฐํ ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊น์ง ๋์๋ ์ ์๋ค๋ ๊ฒ์ ์ฃผ์
๊ฒฐ๋ก
https://www.youtube.com/watch?v=VpEe9DbcZIs
์ผ๋จ ์์์ ๋ดค๊ณ , ์์ฝ์ ํ๋๋ฐ,
TWeakObjectPtr , Raw Ptr์ด๋ฐ
์ฒ์๋ณด๋ ํฌ์ธํฐ ๊ฐ๋ ์ด ๋์์ ์ดํด๊ฐ ์ ํ ๋์ง ์์๋ค.
๋จผ์ ํฌ์ธํฐ๋ถํฐ ๊ณต๋ถํ ํ์ GC๋ฅผ ๋ค์ ์ดํดํด๋ณธ๋ค.
๋ฐ์ด๋ ๊ธ์ด๋ค์, ๊ฐ์ฌํฉ๋๋ค.