ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 게임의 이해
    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
Designed by Tistory.