-
네트워크 게임의 이해Unity 2023. 10. 24. 23:54
I. 네트워크 게임
1. 컴퓨터와 플레이어
멀티 플레이에서의 플레이어
로컬 플레이어
: 본인의 기기에서 플레이하는 플레이어
: ex. a 컴퓨터에서 플레이하는 사람의 캐릭터 플레이어 A
리모트 플레이어
: 상대의 기기에서 비추는 플레이어
: ex. b 컴퓨터에서 비추는 a 컴퓨터에서 플레이하는 사람의 캐릭터 플레이어 A
멀티 플레이는 여러명이 하나의 게임을 하는 것이 아니라, 하나의 게임을 하는 것 처럼 보이는 것.
-> 4인 멀티 플레이어 A, B, C, D가 있다고 하면
-> 4인의 플레이어는 각자의 컴퓨터 a, b, c, d가 있음
-> 4대의 컴퓨터가 통신을 하면서, 4개의 게임 세상이 존재함.( ex. A에는 a의 게임 세상이 존재 / B에는 b의 게임 세상이 존재 ....)
-> 하나의 게임 세상에는 플레이어는 4명이 존재함 (A, B, C, D)
-> 16명의 플레이어가 존재함.==> 이 16명의 플레이어는 모두 다른 오브젝트
동기화를 통해 멀티 플레이어 게임 기능을 구현한다.
컴퓨터 a 에서는 로컬 플레이어 A와 리모트 플레이어 B, C, D가 존재
컴퓨터 b 에서는 로컬 플레이어 B와 리모트 플레이어 A, C, D가 존재동기화를 통해, 로컬 플레이어 A는 다른 컴퓨터에 있는 리모트 플레이어 A에게 자신의 정보를 전달함으로써, 다른 컴퓨터에서도 동일한 행동을 취하게 할 수 있음.
2. 서버와 클라이언트
서버
: 정보나 서비스를 제공하는 컴퓨터
: 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템
클라이언트
: 서버에서 서비스를 받는 컴퓨터
: 네트워크를 통하여 서버라는 다른 컴퓨터 시스템 상의 원격 서비스에 접속할 수 있는 응용 프로그램이나 서비스
동기화
: 게임의 여러 플레이어 간 또는 클라이언트와 서버 간의 상태 및 데이터를 일관되게 유지하는 것
3. 네트워크 게임의 서버 운용
P2P (Peer 2 Peer)
: 클라이언트끼리 네트워크 통신하여 게임을 진행하는 방식
: 게임 로직을 클라이언트에서 직접 처리함.
=> 핵에 취약함.
==> 핵으로 인해 변조한 클라이언트에서 처리된 내용이 다른 클라이언트에서도 그대로 처리됨.
호스트(Host) 를 지정한 P2P
: 진행 중인 게임에서 한명의 클라이언트가 서버 역할(호스트)을 하는 방식
=> 호스트 역할을 하는 컴퓨터의 성능 / 네트워크 환경에 따라 다른 클라이언트도 영향 받음.
: 클라이언트에서 모든 기능을 처리하지 않고, 처리할 정보를 호스트(서버)로 위임해 호스트에서 처리가 이루어진 후, 호스트가 다른 클라이언트에 처리한 내용을 전달(동기화)함.
-> a에서 진행한 A의 이동을 a에서 처리하지 않고, 처리할 것임을 호스트인 b에 전달함.
-> b는 A의 이동을 처리하고, 클라이언트들에 처리한 것을 동기화.
dedicated server 를 활용한 CS 방식
dedicated server
: 플레이어로써 참가하지 않고, 컴퓨터의 모든 자원을 로직의 처리, 게임의 관리에 사용하는 서버.
: 서버에서 일어나는 일은 무조건 일어나는 일/ 서버에서 일어나지 않은 일은 무조건 일어나지 않은 일로 처리됨.=> 클라이언트가 부정행위를 시행하기 매우 어려움.
==> 클라이언트의 게임이 핵으로 인해 변조되었더라도, 처리는 서버에서 하기 때문에 오염된 처리를 하지 않음.
네트워크 패킷 통신으로 인해, delay는 잇을 수 밖에 없음.
: 네트워크 패킷 통신의 속도 (ex., 1초에 10번 통신)을 뛰어넘는 속도로 연산을 해야하는 경우(ex. 총의 속도가 초당 100발)
=> 만약, 단 하나의 패킷이라도 손실된다면,10발 (100 / 10) 은 클라이언트로 전달되지 않았기 때문에, 일어나지 않은 일이 됨.
모든 처리를 싹다 동기화 하지 않음
: 네트워크 비용이 비싸지기 때문.
ex. 뛴다는 사실만을 동기화 하고, 애니메이션 같은 데이터는 동기화하지 않음.
총을 쏜다/ 데미지 갱신 등의 중요한 정보만 동기화.'Unity' 카테고리의 다른 글
photon - 채팅 기능 구현 기획 (0) 2023.10.26 Photon - Demo 탐색 (0) 2023.10.25 readme 작성 (0) 2023.10.19 코루틴 (in Unity) (1) 2023.10.06 UI와 canvas (0) 2023.09.11