플레이어의 상태정보는 서버가 가지고 있고 클라이언트는 서버로부터 상태정보를 받아 화면에 표시하는 구조를 가진다. 플레이어의 상태로는 플레이어의 위치, 체력, 마나와 같은 정보나 스텟과 관련된 정보가 될 수 있다.
서버에서는 플레이어의 정보를 Character와 같은 객체로 만들어 나타낼 수 있고 데미지를 받거나 버프를 받는상황 죽는 상황에 대한 반응을 함수로 나타낼 수 있다.

서버는 클라이언트에게 '상태를 변화시키는 패킷'이나 '플레이어가 죽었음을 알리는 패킷'과 같은 상태변화를 알리는 패킷을 보내야 한다. 하지만, '~한 상태로 바꿔라'라는 패킷은 체력만 감소했는데 플레이어의 전체 정보를 보내야 하는 비효율적인 방식이라 할 수 있지만 패킷을 받은 클라이언트는 받은 정보에 대해서만 랜더링을 수행하면 된다.
그렇다면 모든 상태에 따른 수정패킷을 설계하면 어떻게 될까? 예를들면, '플레이어의 체력 수정패킷', '플레이어의 마나 수정패킷', '플레이어의 그로기 수정패킷'등 많은 패킷이 존재한다면 패킷을 보내는 서버와 받는 클라이언트의 복잡도가 증가하게 될 것이고 이를 구현하는데 걸리는 비용이 크게 늘어날 것이다.
상태 변화 패킷을 받은 클라이언트는 패킷에 존재하는 정보들을 바탕으로 새로운 값을 인터페이스에 반영하게 된다. 가장 대표적인 예는 'HP Bar'가 있다.
클라이언트의 HP Bar는 매우 간단하다. HP Bar는 하나의 GameObject로 나타낼 수 있고 외부에서 값을 조절할 인터페이스를 구현해주면 된다.
public class HpBar : MonoBehaviour
{
[SerializeField]
Transform _hpBar = null;
public void SetHpBar(float ratio)
{
ratio = Mathf.Clamp(ratio, 0, 1);
_hpBar.localScale = new Vector3(ratio, 1, 1);
}
}
물론 여러개의 Bar를 하나의 GameObject로 구현할 수 있지만 HP Bar와 비슷하게 각각의 값을 조절할 인터페이스를 구현해주면 된다.
소멸 이펙트는 싱글플레이게임에서 구현한 [소멸 이펙트]와 비슷하다. 다른점이 있다면 '어떤 플레이어가 죽었다.'라는 패킷의 기능은 '어떤 플레이어의 위치에 소멸 이펙트를 재생해라.'라는 의미를 가지고 있으며 서버에서 곧 바로 소멸패킷을 보내 해당 플레이어를 맵에서 삭제하라는 패킷을 보낼 것이다. 소멸패킷을 받은 클라이언트는 해당 플레이어를 화면에서 지울 수 있다.