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

Jinho Lee·2022년 9월 14일
0

2022.09.14 경일 메타버스 24주차 2일 특강 수업내용. 네트워크 게임월드 구현

네트워크 게임월드

  • 자료 : “레트로의 유니티 게임 프로그래밍 에센스” 2권 7부 ch. 19 p. 857 ~ 933

네트워크용 플레이어 캐릭터 컴포넌트

PlayerInput

  • 로컬 플레이어가 아닌 경우 입력을 받지 않도록 예외 처리

PlayerMovement

  • 로컬 플레이어만 위치와 회전, 애니메이터 파라미터 변경 가능

PlayerShooter

  • 로컬 플레이어만 사격 실행 및 탄알 UI 갱신

LivingEntity

  • 호스트에서만 체력 관리와 데미지 처리 실행

    • RPC 사용해 호스트에 위임, 동기화

    • [PunRPC]

      • RPC를 구현하는 어트리뷰트(속성)

      • 이 속성으로 선언된 메소드는 원격으로 실행 가능

    • RPC()

      • 메소드를 다른 클라이언트에서 원격 실행

      • 입력

        • 원격 실행할 메소드 이름 (string 타입)

        • 원격 실행할 대상 클라이언트 (RpcTarget 타입)

        • 원격 실행할 메소드에 전달할 값

PlayerHealth

  • 리스폰 기능 추가

  • 호스트에서만 아이템 사용 판단

    • RPC 사용해 호스트에 위임, 동기화

    • [PunRPC]

    • RPC()

네트워크 Gun

Gun

  • 호스트에서만 실제 사격 처리 부분 실행

    • RPC()
  • 상태 동기화

    • IPunObservable 인터페이스

      • Photon View 컴포넌트를 사용해 동기화를 구현할 모든 컴포넌트(스크립트)가 상속하고

      • OnPhotonSerializeView() 메소드를 구현해야 한다.

    • OnPhotonSerializeView() 메소드

      • Photon View 컴포넌트를 사용해 로컬과 리모트 사이에서
        어떤 값을 어떻게 주고받을지 결정

      • 값을 직렬화하여 전달

네트워크 좀비

Zombie

  • 호스트에서만 경로 계산, 추적, 공격을 실행

네트워크 아이템

AmmoPack

  • 탄알 추가를 모든 클라이언트에서 실행

  • 모든 클라이언트에서 스스로 파괴

HealthPack

  • 모든 클라이언트에서 스스로 파괴

    • PhotonNetwork.Destroy()

Coin

  • 모든 클라이언트에서 스스로 파괴

ItemSpawner

  • 호스트에서만 아이템 생성

    • 플레이어 기준이 아닌 맵 중심 기준으로

    • PhotonNetwork.Instantiate()

      • 모든 클라이언트의 씬에서 동일한 게임 오브젝트를 생성하고 네트워크 상에서 동일한 오브젝트로 취급
  • 일정한 시간 후 모든 클라이언트에서 파괴

네트워크 게임 매니저

GameManager

  • 룸 나가기 구현

  • 게임 점수 동기화

    • IPunObservable 인터페이스 상속, OnPhotonSerializeView() 메소드 구현
  • 네트워크 플레이어 캐릭터 생성

    • PhotonNetwork.Instantiate()

좀비 생성기 포팅

ZombieSpawner

  • 네트워크 상에서 좀비 생성

    • Color 클래스는 포톤에서 직렬화를 지원하지 않는다.

    • 기존에 RPC에서 지원하지 않던 타입을 직접 지원하도록 정의하는 것이 가능

      • PhotonPeer.RegisterType()
  • 남은 좀비 수 동기화

0개의 댓글