NetworkObject
- 서버를 통해 작동해야하는 오브젝트에 붙여주는 컴포넌트
- 호스트측에서 Instantiate 를 한 뒤, Spawn을 해서 클라이언트측에서 해당 오브젝트가 생성됨
- 클라이언트측에서는 오브젝트를 생성, Spawn 할 권리가 없음
- Spawn(false) 를 할 경우, DontDestroyOnLoad 가 붙은 오브젝트로 생성됨(기본값이 true, 씬을 넘어가면 파괴됨)
- 호스트측에서 오브젝트를 생성하고, SpawnWithOwnerShip() 을 사용하여 입력한 클라이언트 ID 의 소유로 생성해 줄 수 있다
- Spawn시 유니티 생명주기중 Awake 이후에 스폰된다, 따라서 Awake를 사용할 수 없다
NetworkBehaviour
- NetworkManager 와 별도로 IsHost, IsClient 등의 플래그 변수를 저장하고 있다.
- 스폰되기전에는 해당 플래그변수들이 모두 false인 상태이다
- 스폰이 되면IsServer, IsHost, IsClient 등의 정보를 NetworkManager로부터 가져오게된다.
- Rpc 를 여기에서 사용하게된다
- ClientRpc를 사용할때, 스폰이되어있지 않으면 자신이 서버인지 알 수 없기때문에 작동하지 않는다(IsServer 기본값 false)
- Rpc 내에서 다른 함수를 호출할 수 있다....정확한건 좀 더 테스트를 해야할듯 하지만
Netcode를 통해 멀티플레이 구현시 주의해야하는점
- 오브젝트의 생성은 호스트에서만 진행한다. 클라이언트에서 생성을 원할경우 ServerRpc를 통해서 생성을 요청하자
- 추가로 생성되는 NetworkObject 들은 프리팹이 NetworkManager에 등록되어있어야 한다. 등록이 되어있지 않을경우 호스트에서 Spawn 메서드를 사용해도 클라이언트들에서 그 오브젝트가 생성되지 않는다.
Rpc
ServerRpc
- 클라이언트로부터 서버로 전달
- 클라이언트도 사용이 가능하다
ClientRpc
- 서버로부터 클라이언트로 전달
- 기본적으로 연결된 모든 클라이언트에게 내용을 전달한다.
- ClientRpcParams 를 매개변수로 사용하여 특정 클라이언트에게만 내용을 전달하는것이 가능하다 (이때, 전달할 클라이언트의 ID를 사용해야함)
- 서버에서만 호출이 가능하다.
'내일배움캠프 > TIL' 카테고리의 다른 글
면접 관련 - Update문, float와 int 의 표현 가능한 범위가 다른 이유 (0) | 2024.12.12 |
---|---|
면접관련 - 객체지향 프로그래밍과 유니티 생명주기 (0) | 2024.12.06 |
특강 - 그래픽스와 셰이더 (0) | 2024.11.27 |
최종 팀프로젝트 - 멀티플레이 기반 생각하기 (0) | 2024.11.26 |
특강 - 게임을 완성시키기 위한 기획 (1) | 2024.11.25 |