Github Commit
์์ ์ผ์ : 23.07.13
https://github.com/beankong-github/MyOnlineTPS/commit/ffc37d67a44dcaa88a1d14030acd6c23f2c86d3d
[1] ๋คํธ์ํฌ ๋กค ์ดํดํ๊ธฐ
๋คํธ์ํฌ ๋กค : ๋ฉํฐ ํ๋ ์ด์ด ๊ฒ์์์๋ ํ๋ ์ด์ด์ ์บ๋ฆญํฐ๊ฐ ์๋ฒ์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ PC๋ก ๋ณต์ ๋๋ค. ๊ฐ ์บ๋ฆญํฐ๋ ๋คํธ์ํฌ ํ๊ฒฝ์์ ํด๋ผ์ด์ธํธ์ ๋ฐ๋ผ ‘๋คํธ์ํฌ ๋กค’ ์ด ๋ฐ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋์์ ์ด๋ค ์บ๋ฆญํฐ๊ฐ ํ๋ ์ด์ด๊ฐ ์กฐ์ข ํ๋ ์บ๋ฆญํฐ์ธ์ง ๊ตฌ๋ถํ๊ธฐ ์ํด ์บ๋ฆญํฐ์ ๋คํธ์ํฌ ๋กค์ ๊ตฌ๋ถํ๊ณ ์ง์ ํ๋ ๊ฒ์ด ํ์ํ๋ค.
ENetRole : ๋คํธ์ํฌ ๋กค๋ค์ ์ ์ฅ
- ENetRole::ROLE_Authority : ์๋ฒ์ ์กด์ฌํ๋ ํฐ → ์๋ฒ์ ์ฌ๋ผ๊ฐ์๋ ๋ด ์บ๋ฆญํฐ
- ENetRole::ROLE_SimulatedProxy : ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ํ์๋๋ ํฐ → ๋ค๋ฅธ ์ปดํจํฐ์์ ๋ณด์ด๋ ๋ด ์บ๋ฆญํฐ
- ENetRole::ROLE_AutonumouseProxy : ํ์ฌ ํด๋ผ์ด์ธํธ์ ํฐ → ๋ด ์ปดํจํฐ์ ๋ด๊ฐ ์กฐ์ข ํ ์ ์๋ ๋ด ์บ๋ฆญํฐ
https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/Roles/
Local Role
: Authority → ์๋ฒ
(์๋ฒ)
Authority ⇒ ์๋ฒ์์ ๋ก์ปฌ๋ก ๋ฆฌํ๋ฆฌ์ผ์ดํธ๋ฅผ ํด์ฃผ๋ ์กํฐ
(ํด๋ผ์ด์ธํธ)
AutonumouseProxy ⇒ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ๋ฆฌํ๋ฆฌ์ผ์ดํธ๋ฐ๋ ์กํฐ
SimulatedProxy ⇒ ์๋ฒ์์ ๋ฆฌํ๋ฆฌ์ผ์ดํธ๋ฅผ ๋ฐ์์ ์๋ฎฌ๋ ์ด์ ๋๋ ์กํฐ
Remote Role
: Authority → ํด๋ผ์ด์ธํธ
(ํด๋ผ์ด์ธํธ)
Authority ⇒ ๋ฆฌํ๋ฆฌ์ผ์ดํธ๋ฅผ ๋ฐ๋ ์กํฐ
(์๋ฒ)
AutonumouseProxy ⇒ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก๋ฐ์ ํ์์์ด ์๋ฒ์์ ์กฐ์ํ๋ ์กํฐ (๋ฆฌ์จ ์๋ฒ ์ฃผ์ธ)
SimulatedProxy ⇒ ํด๋ผ์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก๋ฐ์ ์๋ฒ์์ ์๋ฎฌ๋ ์ด์ ๋๋ ์กํฐ (์๋ฒ ์ฐธ๊ฐ์)
๐ ๋กค๊ณผ ๋ฆฌ๋ชจํธ ๋กค์ ์ด ๊ฐ์ ๋๊ฐ ์กฐ์ฌํ๋๊ฐ์ ๋ฐ๋ผ ๋ฐ๋๊ฐ ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์๋ฒ์์ ํ๊ฒฝ์ค์ ์ด ์ด๋ ๊ฒ ๋์ด์๋ค๋ฉด:
Role == ROLE_Authority
RemoteRole == ROLE_SimulatedProxy
ํด๋ผ์ด์ธํธ์์๋ ์ด๋ ๊ฒ ๋ณด์ผ ๊ฒ์ ๋๋ค:
Role == ROLE_SimulatedProxyRemoteRole == ROLE_Authority
์ด๋ ์ ์์ธ๋ฐ, ์กํฐ๋ฅผ ๋ด๋นํ๋ ๊ฒ์ ์๋ฒ์ด๋ฉฐ, ์ด ์กํฐ๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ฆฌํ๋ฆฌ์ผ์ดํธํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๊ทธ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ ๊ทธ ์ ๋ฐ์ดํธ ์ฌ์ด ์กํฐ์ ์๋ฎฌ๋ ์ด์ ์ ์ ์ฉํ ๋ฟ์ ๋๋ค.
๋ก์ปฌ ๋กค์ด๋ ๋ฆฌ๋ชจํธ ๋กค ์ฐจ์ด๋ฅผ ์ดํดํ๋๊ฒ ์ข ํ์๋ค;; ๋ฏธ๋ฌํ ๋์์ค ์ฐจ์ด๊ฐ์๋ฐ ์ด๊ฑธ ๋ฐ๋ก ์ดํดํ๊ธฐ ํ๋ฆ. ์ผ๋จ ์ดํดํ๋๋ก ๋ก์ปฌ ๋กค์ด๋ ๋ฆฌ๋ชจํธ ๋กค ์ฐจ์ด๋ฅผ ์ ๊ธดํ๋๋ฐ ์ ํํ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
์๋ฌดํผ ํด๋ผ์ด์ธํธ์์๋ Local Role์ ์ด์ฉํด์ ํ๋ ์ด์ด์ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ ์ ์๊ณ ๋ฆฌ์จ ์๋ฒ์์๋ Remote Role์ ์ฌ์ฉํด์ ํ๋ ์ด์ด์ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค.
์ด๊ฒ์ ์ด์ฉํด์ ์์ ์ ์บ๋ฆญํฐ์ ์ด๋ฆํ๋ ๋ ธ๋๊ฒ, ๋ค๋ฅธ ์บ๋ฆญํฐ์ ์ด๋ฆํ๋ ํ์๊ฒ ํ์ํ ์ ์๋ค.
[2] Player Overhead HUD ๊ตฌํํ๊ธฐ
์ฝ๋
void UOverheadWidget::ShowPlayerName(APawn* InPawn)
{
if (nullptr == InPawn)
return;
/* Get Player Name */
const APlayerState* LocalPlayerState = InPawn->GetPlayerState();
FString Name = "Unknown";
if (LocalPlayerState)
{
Name = LocalPlayerState->GetPlayerName();
}
/* Show role as color */
ENetRole LocalRole = InPawn->GetLocalRole();
ENetRole RemoteRole = InPawn->GetRemoteRole();
FColor RoleColor;
switch (LocalRole)
{
case ROLE_None:
RoleColor = FColor::Black;
break;
case ROLE_SimulatedProxy:
RoleColor = FColor::White;
break;
case ROLE_AutonomousProxy:
RoleColor = FColor::Yellow;
break;
case ROLE_Authority:
if (RemoteRole == ROLE_AutonomousProxy)
{
RoleColor = FColor::Yellow;
}
else if (RemoteRole == ROLE_SimulatedProxy)
{
RoleColor = FColor::White;
}
break;
}
SetDisplayText(Name, RoleColor);
}
๊ฒฐ๊ณผ
์๋ฒ์์๋ ์๋ฒ ์ฃผ์ธ์ ๋นจ๊ฐ์, ๋๋จธ์ง ์ฐธ๊ฐ์๋ ํ๋์์ผ๋ก ํ์
=>ํ์ฌ๋ ์๋ฒ ์ฃผ์ธ์ ๋ ธ๋์, ๋๋จธ์ง ์ฐธ๊ฐ์๋ ํ์์์ผ๋ก ํ์ํ๊ณ ์๋ค.
ํด๋ผ์ด์ธํธ์์๋ ์์ ์ ๋ ธ๋์, ๋ค๋ฅธ ํ๋ ์ด์ด๋ ํ์์์ผ๋ก ํ์