๋ณ์๋ ์์ดํ ์ ๋ณต์ ํ๊ฒ ๋ ๊ฒ์ธ๋ฐ
ํด๋น ์์ดํ ๋ณ์๊ฐ ์ด RPC๋ก๋ ์ฌ์ฉ์ด ๋ ๊ฒ์ด๊ณ Property Replication์ผ๋ก๋ ์ฌ์ฉ์ด ๋ ๊ฒ์ ๋๋ค.
์ด๋ฐ ์ํฉ์์ ๋ณต์ ๋ ๋ณ์์ ๋ํด์๋ USTRUCT๊ฐ ์ข์๊น์? UObject๊ฐ ์ข์๊น์?
์์ :
1. ๊ตฌ์กฐ์ฒด
USTRUCT(BlueprintType)
struct FItemData : public FTableRowBase //TableRowBase ๋ Datatable์ ์ฌ์ฉ์ ์ํด
{
GENERATED_BODY()
UPROPERTY()
UTexture2D* ItemImage;
UPROPERTY()
FItemAttributes ItemAttribute;
...
};
์ด๋ฐ์์ผ๋ก ์ ์ํ๋ฉด Replication์ ์๋ํ ๋, ๊ฐ๋จํ๊ฒ ๋ณด๋ผ ์ ์์ด์ ์ข์๊ฑฐ ๊ฐ์ต๋๋ค.
2. UObject (UClass)
UCLASS()
class UItemData : public UObject
{
GENERATED_BODY()
UPROPERTY()
UTexture2D* ItemImage;
UPROPERTY()
FItemAttributes ItemAttribute;
}
์ด ๋๊ฐ์ง ๋ฒ์ ์์ ์ด๋ค ๋ฐฉ๋ฒ์ ์ด๋ค ์ฅ์ ์ด ์๊ณ , ๋ญ๊ฐ ์ข์์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํ์ฌ UObject๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํด๋ณด์๋๋ฐ UObject๋ฅผ Replicateํ๊ธฐ ์ํด์๋ Actor์ ReplicateSubObject ํจ์์๋ Override ํด์ฃผ๊ณ ๋ณต์ ํ ๋ ๋ง๋ค ํด๋น ์ค๋ธ์ ํธ๋ฅผ ๋ณด๋ด์ค์ผ ์ ๋๋ก ์ฐ๋์ด ๋๋๋ผ๊ตฌ์.
๊ทธ๋ฆฌ๊ณ TArray<UItemData> ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ฃผ๋ ค๊ณ ํ๋๊น RPC๋ฅผ ์ฌ๋ฌ๋ฒ ๋ณด๋ด์ผํ๊ฒ ๋๋ผ๊ตฌ์ (ReplicateSubObject ํจ์์ ์ฌ๋ฌ๋ฒ ๋ฃ์ด์...)
๊ทธ๋์ USTRUCT๋ก ๋ณ๊ฒฝํด์ฃผ๋ ์์ ์ ํด๋ณด๋ ค๊ณ ํ๋๋ฐ
๊ฐ ๊ฐ ์๋์ด ์๋๋๊ฑด ์๋๋ฐ ์ฅ์ / ๋จ์ ์ด ์์๊น์?
์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ด๋ค์์ผ๋ก ๊ตฌํํ๋๊ฒ ์ข์๊น์?
๋ฐ์ดํฐํ ์ด๋ธ๋ก ์์ดํ ๊ด๋ฆฌํ ๊ฑฐ๋ฉด ์์ ๋ฐ์ดํฐ๋ก๋ง ์์ดํ ์ ๊ด๋ฆฌํ๋๊ฑฐ๊ณ ์ง๊ธ ํ๊ณ ์๋ uitemdata๋ฅผ ๋ฆฌํ๋ฆฌ์ผ์ด์ ์ด์ผ๊ธฐ๋ฅผ ๋ณด๋๊น ์์ดํ ์์ฒด๊ฐ ๋ณํ๋ ์์๊ฒ ์ธ์คํด์ค๋ก ๊ฐ์ง๊ณ ๊ฐ๋๊ฑด๋ฐ, ๋์ด ๋ชฉ์ ์์ฒด๊ฐ ๋ค๋ฆ. uitemdata๋ ์์ ๋ฐ์ดํฐ์ฉ์ผ๋ก ์ธ๊ฑฐ๋ฉด uitemdata๋ฅผ ์์ํ๋ ๋ธ๋ฃจํ๋ฆฐํธ๋ฅผ ๋ง๋ค๊ณ ํด๋น ๋ธํ๋ฅผ TSubclassOf๋ก ๋ฆฌํ๋ฆฌ์ผ์ด์ ํ๋๊ฑธ ์ถ์ฒ.
"ํด๋น ๋ธํ" -> "ํด๋น ๋ธ๋ฃจํ๋ฆฐํธ ํด๋์ค"
์๋๋ฉด ์ ์ด์ ์์ดํ ์ ์ธ์คํด์ค๋ก ๋ง๋ค์ด์ ๋ณํ๊ฐ๋ฅํ๊ฒ ํ ๊ฑฐ๋ฉด ๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์์ดํ ๋ฐ์ดํฐ ์์ฒด๋ ๋ฐ๋ก ๊ด๋ฆฌํด์ผํ๊ณ ํ ์ด๋ธ๋ก ํ ๊ตฐ๋ฐ์์ ๊ด๋ฆฌํ ๊ฑฐ๋ ์๋๋ฉด ๋ฐ๋ก๋ฐ๋ก ๊ด๋ฆฌํ ๊ฑฐ๋ ์ทจํฅ์ฐจ์ด์ง. ๋ณดํต ๋ฐ์ดํฐ๊ฐ ๋ง์ ํธ์ด๋ฉด ํ ์ด๋ธ๋ก ํ๊ณ ๋ณ๋ก์์ผ๋ฉด ๊ทธ๋ฅ ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค๋ก ๊ด๋ฆฌํด๋ ๋๊ณ
์๋๋ฉด ํน์ FItemData๋ฅผ ๊ทธ๋๋ก Array์ ๋ฃ์ด์ TArray<FItemData>๋ก ๊ด๋ฆฌํ๋ค๋ ๋ง์ด๋ผ๋ฉด, ์ด๊ฑด ์์๋ฌ์ผํ ๊ฒ, rpc๋ก ๋ฐฐ์ด์ ํน์ ์๋ฆฌ๋จผํธ๋ฅผ ์ง์ ํด์ ๋ณด๋ผ์๊ฐ ์๋ค. rpc์ ํด๋น ์๋ฆฌ๋จผํธ์ ์ธ๋ฑ์ค๋ฒํธ๋ฅผ ๋ฐ๋ก ๋ถ์ฌ์ ๋ณด๋ด์ง์๋ ํ.
์๊ฒฌ ๊ฐ์ฌํฉ๋๋ค ์์งํ ์ง๊ธ ์ธ๋ฒคํ ๋ฆฌ ์ปดํฌ๋ํธ์์ UObject ๋ฅผ ๊ณ์น๋ฐ์ UItemData๋ฅผ ์ฌ์ฉํด์ RPC ๋ฐ Property Replication์ ํ๊ณ ์๋๋ฐ ๋ฌธ์ ๊ฐ ์ฒซ๋ฒ์งธ๋ก ๋๋ฌด ๋ณต์กํ๊ณ ๋๋ฒ์งธ๋ก ์ธ๋ฒคํ ๋ฆฌ ์ ์ฒด๋ฅผ ๋ณต์ ๋ฐ์ ๋, ๊ฐ ๋ชจ๋ ์ค๋ธ์ ํธ์ ๋ํด ReplicateSubObject mark ๋ฐ ์๋ฒ์ ๋ง์ฝ ์๋ ์ค๋ธ์ ํธ๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ณด๋ด๊ฒ ๋ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ์๋ฌ๊ฐ ์๊ธฐ๋ ์ํฉ์ด ๊ณ์ ๋ฐ์์ ํด๋ฒ๋ ค์
๊ฒฐ๊ตญ์๋ ๊ทธ๋ฅ ๋ง์ํด์ฃผ์ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ฒด๊ฐ ๋ ๊บผ ๊ฐ์ ๊ทธ๋ฅ USTRUCT๋ก ๋ณ๊ฒฝํ๋ ์์ ์ ํ๋ฒ ์งํํด๋ณด๋ ค๊ณ ํฉ๋๋ค
๊ทธ๋ฆฌ๊ณ ์ด ๋ฐฐ์ด์ด ์ธ๋ฑ์ค๊ฐ ๋ฑํ ํ์๊ฐ ์๊ณ (์ ๋ฆฌ๋์ง ์์๋ ๋จ.) Push Based ๋ฐฉ์์ผ๋ก ๋ณต์ ๋ฅผ ํ๊ณ ์์ด์ ํน์ ์๋ฆฌ๋จผํธ์ ๋ณ๊ฒฝ์ ์ OnRepํจ์์์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ์๊บผ๊ฐ์ต๋๋ค
์ ๋ง ๋ฐ์ดํฐ๋ง ๋ณด๋ธ๋ค๋ ๋ชฉ์ ์ธ๊ฑฐ๋ฉด ํด๋น ํด๋์ค๋ฅผ TSubclassOf๋ก ๋ณด๋ด๋ ์๊ด์์
๊ตฌ์กฐ์ฒด๋ก ํด๋ ์๊ด์๊ณ