경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20220715 2022/04/04~2022/12/13

Jinho Lee·2022년 7월 15일
0

경일 메타버스 20220715 15주차 5일 수업내용. 멀티플레이어 게임 이론, 유니티 애니메이션

멀티플레이어 게임의 역사

  • 로컬 멀티플레이어 게임

    • 초기에 나왔던 멀티플레이어 게임
    • 한 컴퓨터에서 2명 이상의 플레이어가 같이 즐기는 방식
    • 구현 또한 우리가 지금까지 만들었던 싱글플레이어 게임과 다르지 않다.
  • 초기 네트워크 멀티플레이어 게임

    • 네트워크를 이용한 멀티플레이어 게임은 메인프레임으로 구성된 소규모 네트워크에서 처음으로 등장했다.
    • 직렬 포트(Serial Port)를 사용해 서로 통신했다.
  • MUD

    • 멀티 유저 던전(Multi-User Dungeon).
      텍스트 기반으로 진행되는 멀티플레이어 게임이다.
    • 에식스 대학에 재학 중이던 랍 트루쇼가 만든 머드에서 유래됐다.
  • LAN 게임

    • 이더넷(Ethernet)이 보급되며 근거리 통신망(Local Area Network)을 이용한 게임이 등장했다.
  • 온라인 게임

    • 인터넷(Internet)이 보급되며 비로소 이때부터 우리가 아는 형태의 멀티플레이어 게임이 생겨났다.
    • 랜 게임과 구현은 비슷했지만 레이턴시(Latency)에 따른 부작용을 최소화하는 기법이 생겨났다.
      • 레이턴시(Latency) :
        네트워크로 데이터를 전송하며 발생하는 시간 지연
  • MMO 게임

    • 하나의 게임 세션수백, 수천 명의 플레이어가 동시에 참여하는 게임을 말한다.
    • 가장 고전은 울티마 온라인이라고 할 수 있으며, 이후 부흥은 월드 오브 워크래프트가 이끌었다.
  • 모바일 네트워크 게임

    • 초기 모바일 네트워크 게임은 비동기식 구현이 주를 이루었다.
    • 유선망 품질에 비해 무선망이 형편 없었기 때문
    • 아직도 대부분의 모바일 게임은 비동기식 구현이 주를 이룬다.
      물론 요즘은 무선망이 많이 발달되어 실시간 네트워크를 지원하는 게임이 많아지긴 했다.

게임 서버

게임 서버의 역할

  • 게임 서버는 게임 루프 중 업데이트 일부를 떼어 내어 실행한다.
    1. 아이템 획득과 같은 클라이언트에서 해킹 당하면 안 되는 처리를 실행
    2. 플레이어 데이터를 저장
    3. 여러 사용자 간의 행동을 중재해 결과를 판정한다.

네트워크 토폴로지(Network Topology)

  • 여러 컴퓨터가 네트워크 상 연결되어 있는 양태를 말한다.
    즉, 컴퓨터끼리 어떻게 연결시킬 건지를 말하는 것이다.

  • 이론 상으로는 버스형, 링형 등 여러가지가 있지만 여기서는 온라인 게임에서 쓰이는 토폴로지만 알아본다.

  1. 클라이언트-서버(Client-Server)

    • 가장 대중적인 구조로 CS 구조라고 불린다.
      하나의 컴퓨터에 여러 컴퓨터가 접속하는 방식이다.

    • 토폴로지로서는 성형, Star형이다.

    • 권한 집중형(Authoritative)으로 서버라고 불리는 컴퓨터가 모든 행동에 대한 판정을 내린다.

    • 데디케이티드 서버(Dedicated Server)리스닝 서버(Listening Server)가 있다.

      • 데디케이티드 서버(Dedicated Server) :
        게임 서비스를 제공하는 업체가 고성능의 컴퓨터를 이용해 서비스를 하는 방식

      • 리스닝 서버(Listening Server) :
        플레이어가 게임에서 제공하는 프로그램을 이용해 직접 서비스하는 방식.
        리스닝 서버는 피어 호스팅(Peer Hosting)이라고도 한다.

  2. 피어 투 피어(Peer To Peer)

    • P2P라고도 한다. 게임에 참여하는 모든 컴퓨터끼리 서로 접속하는 방식이다.

    • 토폴로지로서는 Fully Connected이다.

    • CS와 달리 판정 권한이 어디 있는지 불분명하며, 보편적으로 각 피어마다 입력을 서로 공유해 각자가 이들 입력을 스스로 시뮬레이션 한다.
      락스텝(Lock Step) 동기화 알고리즘

게임 플레이 네트워킹

  • 서로 다른 클라이언트의 모든 게임 화면을 똑같이 보여주기 위한 여러가지 기법이 있다.
  1. 모든 연산서버가 부담

    • 가장 고전적인 방법으로 클라이언트는 단순히 입력 전달과 화면 출력만 하고, 서버에서 게임 로직 연산, 화면 렌더링, 송출까지 하는 방법

    • 예전 MUD형 게임에서 주로 했던 방식인데, 요즘 게임은 그래픽 품질이 매우 높아 비용이 비싸므로 최근까지만 하더라도 사용하지 않았다.

    • 하지만 기술이 발전하면서 스테디아, 지포스 나우 등 클라우드 게이밍으로 재탄생 하게 되었다.

  2. 렌더링을 클라이언트에서 하기

    • 가장 보편적인 방법으로 서버가 클라이언트에 게임 월드 상태를 보내어 렌더링하게 하는 것이다.

    • 채팅이나 캐릭터 이동 같은 게임 월드의 업데이트서버가 클라이언트로부터 메시지를 받아 진행한다.

      • 메시지란 네트워크 상에서 보내지는 데이터를 말한다.

이상적인 건 게임이 목표한 프레임률만큼 업데이트를 하는 것이겠지만 네트워크란 것이 워낙 변수가 많으므로 그렇게 하기란 쉽지 않다.

그래서 업데이트 주기를 늘리게 되는데, 이를 플레이어가 못 느끼게 하기 위해 추측항법(Dead Reckonning)과 같은 레이턴시 마스킹(Latency Masking)을 이용하거나 플레이어 가시 영역 부분만을 전달하거나  락스텝(Lockstep) 동기화 같은 여러 방법을 사용하게 된다.

리플리케이션(Replication)

  • 객체의 상태를 한 호스트에서 다른 호스트로 복제, 전달하는 행위

  • 리플리케이션을 위해선 먼저 직렬화를 해야한다.

  • 직렬화(Serialize) :
    서로 다른 컴퓨터 간에 데이터 전송을 위한 기법으로 데이터를 일련의 바이트열로 바꾸는 것을 말한다.

  • 얼핏 생각하면 그냥 메모리 그대로 보내주면 되는 것 아닌가 싶지만, 데이터가 다른 메모리 주소인 경우긴 데이터를 압축하기 위해서도 필요하다.

  • 직렬화에는 보통 json 형식이 많이 쓰이며, 구글이 만든 프로토콜 버퍼 라이브러리도 많이 사용된다.

  • RPC(Remote Procedure Call) :
    객체의 메소드를 호출할 때 사용한다.
    다른 호스트의 특정 프로시저가 원격 수행되도록 지시하는 것을 말한다.
    이를 엄밀하게 RMI(Remote Method Invocation)으로 구분하기도 한다.

  • 자료 : https://docs.google.com/document/d/1a8TbfG0FoSqat8b58ZkQ_QC8O03oTz2-g8j4kupZwYo/edit#

Unity 애니메이션

  • 애니메이션 클립 :
    실제로 어떤 이미지를 얼마나 재생할지 결정

  • 애니메이터 :
    애니메이션을 언제 전환할지 결정 → 관리자

0개의 댓글