๐
2025-11-13
๋ฉํฐํ๋ ์ด์ด ํ๊ฒฝ์์ Client๊ฐ BP_TSCharacter_C_0์ ์ฐธ์กฐํ๋ ๊ฒ์ ๋ณด๊ณ "์ด? Player 1์ธ๋ฐ ์ 0๋ฒ ์บ๋ฆญํฐ๋ฅผ ์ฐธ์กฐํ์ง?"๋ผ๊ณ ์ฐฉ๊ฐํ๋ค.
๊ฐ ์๋(Server, Client)๋ ์์ ๋ง์ Actor ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ฆ์ ๊ฐ ์๋์์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ๋๋ค.
Server ์๋:
โโ BP_TSCharacter_C_0 (Server Player)
โโ BP_TSCharacter_C_1 (Client Player)
Client ์๋:
โโ BP_TSCharacter_C_0 (์์ = AutonomousProxy) โ ์๋ฒ์ C_1๊ณผ ๋๊ธฐํ!
โโ BP_TSCharacter_C_1 (์๋ฒ ๋ณต์ ๋ณธ = SimulatedProxy)
Actor ์ด๋ฆ์ด ์๋๋ผ Role ๊ฐ์ผ๋ก ํ๋จํด์ผ ํ๋ค:
Role: ROLE_AutonomousProxy (2) = ๋ด๊ฐ ์ ์ดํ๋ ์บ๋ฆญํฐRole: ROLE_SimulatedProxy (1) = ๋ค๋ฅธ ํ๋ ์ด์ด์ ๋ณต์ ๋ณธRole: ROLE_Authority (3) = ์๋ฒ"๊ตฌ์กฐ์ฒด ์์ ๊ตฌ์กฐ์ฒด๊ฐ ์์ผ๋ฉด ๋ด๋ถ ๊ฐ๋ง ๋ฐ๊ฟจ์ ๋ ๋ณต์ ์ ๋๋๊น ForceNetUpdate() ์จ์ผ ํ๋ค"
์ต์์ ๋ณ์์ ReplicatedUsing์ ์ ์ธํ๊ณ , ๋ด๋ถ ๊ฐ๋ค์ UPROPERTY๋ก ์ ์ํ๋ฉด ์ธ๋ฆฌ์ผ์ด ์์์ ์ง๋ ฌํํด์ ๋ณต์ ํด์ค๋ค!
// ๊ตฌ์กฐ์ฒด ์ ์
USTRUCT(BlueprintType)
struct FSlotStructMaster
{
GENERATED_BODY()
UPROPERTY() // โ
UPROPERTY๋ง ์์ผ๋ฉด ๋จ!
int32 CurrentStackSize;
UPROPERTY()
FItemInstance ItemData; // ๊ตฌ์กฐ์ฒด ์์ ๊ตฌ์กฐ์ฒด๋ OK
};
// ์ปดํฌ๋ํธ
UPROPERTY(ReplicatedUsing = OnRep_HotkeyInventory) // โ
์ต์์๋ง ์ ์ธ
FInventoryStructMaster HotkeyInventory;
๋ด๋ถ ๊ฐ์ ๋ฐ๊พธ๋ฉด:
HotkeyInventory.InventorySlotContainer[0].CurrentStackSize = 10;
// โ
์๋์ผ๋ก OnRep_HotkeyInventory() ํธ์ถ๋จ!
// ForceNetUpdate() ๋ถํ์!
ReplicatedUsing ์ ์ธUPROPERTY ๋งคํฌ๋กGetLifetimeReplicatedProps์ ๋ฑ๋กโ ์ธ๋ฆฌ์ผ์ด ์๋์ผ๋ก ๋ณ๊ฒฝ ๊ฐ์ง ๋ฐ ์ง๋ ฌํ!
๋คํธ์ํฌ ๋ณต์ ๋ "๋์ ๋ณด์ด๋ ๊ฒ"๊ณผ "์ค์ ๋์"์ด ๋ค๋ฅผ ์ ์๋ค๋ ๊ฑธ ๋ฐฐ์ ๋ค. Actor ์ด๋ฆ ๊ฐ์ ํ๋ฉด์ ์ธ ์ ๋ณด์ ์์ง ๋ง๊ณ , Role์ด๋ NetMode ๊ฐ์ ๋ณธ์ง์ ์ธ ๊ฐ์ ๋ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ๋ฆฌ์ผ์ ๋ณต์ ์์คํ ์ ์๊ฐ๋ณด๋ค ๋๋ํด์, UPROPERTY๋ง ์ ๋๋ก ์ ์ธํ๋ฉด ๋ณต์กํ ๊ตฌ์กฐ์ฒด๋ ์์์ ์ง๋ ฌํํด์ค๋ค. ๋ถํ์ํ ForceNetUpdate() ๋จ๋ฐ์ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ๋ค.