관리 메뉴

개발블로그

포톤 유니티 네트워크(PUN-Photon Unity Network) - 네트워크 기본 개념 본문

Unity

포톤 유니티 네트워크(PUN-Photon Unity Network) - 네트워크 기본 개념

dvmoo 2021. 11. 18. 10:04

* 포톤네트워크
 - 네트워크 기본 개념
 - 플레이어가 대기하거나 다른 플레이어를 찾는 로비
 - 플레이어가 모이는 룸
 - 이 과정에서 플레이어를 찾아 한 룸에 모이도록 하는 매치메이킹 시스템 구현

* 로컬과 리모트
 - 네트워크에서 로컬은 물리적으로 사용자의 위치에 존재하는 단말기나 프로그램, 오브젝트를 표현하는 단어
   리모트는 원격 접속을 통해 접근할 수 있는 단말기나 프로그램, 오브젝트를 표현하는 단어.
   ex) 로컬 데스크톱 : 사용자가 직접 사용중인 pc, 리모트 데스크톱 인터넷등을 통해 접속한 타인의 컴퓨터.
   
 - 네트워크 게임에서 씬에 존재하는 게임 오브젝트는 로컬오브젝트/리모트오브젝트로 구분할 수 있음.
   이를 나누는 기준에는 주도권에 있다.
   
   로컬 오브젝트  : 주도권이 자신에게 있음
   리모트 오브젝트 : 주도권이 네트워크 너머의 타인에게 있음
 
 - 리모트 게임오브젝트는 로컬 클라이언트에 주도권이 없으므로 특별한 경우를 제외하면 로컬 클라이언트가 리모트 오브젝트를 임의로 삭제
   하거나 주요 상태를 변경할 수 없다.
   
* 동기화
 - 로컬 플레이어 캐릭터 a의 정보를 다른 월드에 있는 리모트 플레이어 캐릭터 a에 전달하여
   로컬 플레이어 캐릭터 a의 변경사항을 리모트 플레이어 캐릭터 a에 반영.
   이러한 방식으로 게임월드를 끊임없이 같은 모습으로 동기화함.
   
 - 동기화 간격이 길거나, 인터넷 속도가 느리면 각각의 게임월드의 모습이 조금씩 달라질 수 있다.
   또한 네트워크 접속이 끊기면 각각의 게임월드는 서로 완전히 독립적으로 동작하게 된다. 
   
* 로컬 권한 검사
 - 로컬 플레이어 게임오브젝트든, 리모트 플레이어 게임오브젝트든 플레이어 게임 오브젝트의 컴포넌트 구성은 달라지지 않음.
   따라서 로컬과 리모트 플레이어 캐릭터 모두 사용자 입력을 받을 수 있음.
   하지만 그렇게 조작하면 안되기 때문에 이것을 구현하려면 오브젝트가 로컬 권한을 가지고 있는지 검사해야 함.
   
 - 코드마다 if문을 삽입하여 오브젝트 자신이 로컬 오브젝트라면 사용자 입력을 그대로 받고, 리모트라면 사용자 입력을 무시한다.
 
 // A의 게임월드에서 a 캐릭터 플레이어
 void Update()
 {
if(!local)
return;
// 사용자 입력 감지
// 움직임 적용 --> 도달 가능
 }
 
 // A의 게임월드에서 b, c, d 캐릭터 플레이어
 void Update()
 {
if(!local)
return; // 로컬이 아니므로 밑의 조건 도달 불가능
// 사용자 입력 감지
// 움직임 적용
 }

'Unity' 카테고리의 다른 글

[유니티] 유니티의 메타파일 (.meta)  (2) 2021.08.05
[유니티] 유니티 생명주기 (Unity Life Cycle)  (0) 2021.07.26