Coder Social home page Coder Social logo

3d_multi_shooting_game's Introduction

💫About Me

😄저는 새로운 것을 배우는 걸 좋아하는 개발자입니다.
😀저는 내가 작성한 코드에 책임감이 있는 개발자입니다.
😁저는 배운걸 기록하고 공유하는 개발자입니다.


💻Tech Stack

C# Java Spring MySQL Unity


👨‍💻 Github Stats

3d_multi_shooting_game's People

Contributors

yarogono avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

bmjoy

3d_multi_shooting_game's Issues

Autofac DI 적용

설명(Description)

  • Autofac은 IOC 컨테이너 관련 Nuget 패키지입니다.
    • 오픈 소스 DI 컨테이너로 객체 간의 의존성을 줄이고 코드의 유연성, 유지 보수성을 증가시킵니다.
  • MangosServer 라는 Wow 오리지널 오픈 소스 프로젝트에서 사용을 하고 있습니다.
    • StartAsync()를 사용해서 비동기 프로그래밍을 적용하고 있습니다.

To Do List

  • Server/Autofac Nuget 패키지 다운로드
  • NetworkService DI 처리
  • Listenr DI 처리

참고 자료

Server/SocketAsyncEventArgsPool

설명(Description)

  • SocketAsyncEventArgs 객체를 풀링해서 관리하는 역할을 담당합니다.

To Do List

  • SocketAsyncEventArgsPool 클래스 생성
  • NetworkService 클래스 생성
  • SocketAsyncEventArgsPool 로직 구현

참고 자료

  • FreeNetLite 코드 => 링크
  • c#, SocketAsyncEventArgs 메모리 릭 현상 => 링크

근접 무기 공격 구현

설명(Description)

  • 클라이언트
    • 캐릭터가 들고 있는 아이템 중 해머 공격 기능 구현
    • 해머 공격 로직 구현
    • 해머 공격 애니메이션 적용
  • 서버
    • 해머 공격 동기화
    • 해머 공격 애니메이션 동기화

To Do List

  • Client/해머 공격 로직 구현
  • Client/해머 공격 애니메이션 적용
  • Server/해머 공격 애니메이션 동기화
  • Client/해머 공격 대미지 로직 구현
  • Server/해머 공격 대미지 동기화
  • Server/클라이언트 위치에 따른 공격 검증 로직 추가
    • Client/피격 시 일정 시간 무적 로직 추가

Client/아이템 장착 로직 구현

설명(Description)

  • 클라이언트 코드는 유튜브 골드메탈(3D 쿼터뷰 액션게임) 참고해서 구현 => 링크

To Do List

  • 아이템 오브젝트 감지 구현
  • 아이템 줍기 텍스트 Popup UI 구현
  • 아이템 줍기 및 장착 구현
  • 아이템 변경(Swap) 구현

참고 자료

Server/Listen Worker 구현

설명(Description)

  • 유저의 접속을 처리하는 스레드를 생성 및 로직 구현

To Do List

  • [ ]
  • [ ]

Client/MyPlayerSyncAnimation

설명(Description)

  • 포톤(Photon) 코드를 참고
    • PhotonView
    • PhotonAnimatorView
    • IPunCallbacks

To Do List

  • PlayerSyncTransform에서 애니메이션 로직 제거
  • MyPlayer 애니메이션 분리
  • [Bug] MyPlayer 걷기(Walk) 애니메이션 버그 수정
    • 달리기 애니메이션 실행 중 걷기로 트랜지션 버그
    • Idle상태에서 걷기 트랜지션 버그

Client/Asset 다운로드

설명(Description)

  • 골드메탈님 - 쿼터뷰 3D 액션 에셋 팩 다운로드 => 링크
  • 2D에서 3D로 설정 변경

To Do List

  • 쿼터뷰 3D 액션 에셋 팩 다운로드
  • 기존에 있는 2D 에셋 정리

Client, Server/지연 시간 체크 && 데드레커닝

설명(Description)

  • 데드 레커닝(추측 항법)을 구축하기 위해 지연 시간(네트워크 레이턴시) 구하는 로직 필요
  • 포톤의 코드를 참고해서 구현
    • PhotonNetwork
    • PhotonTransformView

To Do List

  • Ping 지연 시간 체크(Round-Trip-Latency) 로직 추가
  • 포톤 코드 참고해서 데드레커닝 로직 구현

참고 자료

전송 패킷 압축

설명(Description)

  • 서버와 클라이언트가 주고 받는 패킷을 gzip을 사용해 압축합니다.
  • 서버와 클라이언트 둘 다 압축을 하는 로직을 추가합니다.

To Do List

서버

  • 패킷 압축 로직 작성
  • 레이턴시 체크 및 성능 변화 확인

클라이언트

  • 패킷 압축 로직 작성

참고 자료

  • C# byte 압축 / 해제 => 링크
  • 스택오버플로우 - Compress and decompress a Stream with Compression.DeflateStream => 링크

Client/Game씬 맵 초기 세팅

설명(Description)

  • 게임씬 맵 기초 세팅을 합니다.
    • 바닥, 벽 만들고 케릭터 추가

To Do List

  • 벽 만들기
  • 바닥 만들기
  • 케릭터 프리팹 만들기

AccountServer/테스트 코드 작성

설명(Description)

  • C# ASP.NET Core 테스트 코드를 작성해서 서버의 안정성 높이기

To Do List

  • AccountServer 테스트 프로젝트 생성
  • Moq 패키지 설치
  • AccountService 테스트 코드 작성
    • AddAccount Mock 테스트 코드 작성
    • AccountLogin Mock 테스트 코드 작성
  • MSTest에서 XUnit으로 변경
  • OauthService 테스트 코드 작성

참고 자료

  • MS Docs - 관리 코드에 대한 단위 테스트 만들기 및 실행 => 링크
  • MS Docs - MSTest 및 .NET을 사용한 C# 단위 테스트 => 링크
  • MOCK을 활용한 .NET 단위 테스트 => 링크
  • ASP.NET Integration Testing => 링크
    • 소스코드(깃허브 레포지토리) => 링크
  • Testing Controllers with Unit Tests and Moq in ASP.NET Core => 링크
    • Moq로 Mock 테스트 하는데 제일 많이 참고한 자료
  • 단위 테스트 순서 지정 => 링크

AccountServer/프로젝트 생성 및 세팅

설명(Description)

  • AccountServer 프로젝트 생성
  • 구글 로그인, DB에 데이터를 저장하는 역할을 하는 Rest API서버

To Do List

  • AccountServer 프로젝트 생성
  • Nuget 패키지 설치
  • AccountServer 프로젝트 초기 코드 작성

무기 아이템 Swap 애니메이션 로직 구현, 동기화

설명(Description)

  • 무기 아이템 변경 시 애니메이션 동작
  • 서버와 애니메이션 동기화

To Do List

  • 무기 아이템 변경 애니메이션 추가
  • 무기 아이템 변경 애니메이션 로직 구현
  • 무기 아이템 변경 애니메이션 동기화 처리

AccountServer/Swagger

설명(Description)

  • API 문서 자동화 툴인 Swagger를 적용

To Do List

  • Swagger 세팅
  • Swagger 테스트
  • 테스트는 나중에 진행 예정

*.csproj 파일 Push

설명(Description)

  • *.csproj 파일이 없어서 Git clone을 해도 프로젝트를 실행할 수 없다.

To Do List

  • *.csproj 파일 Git에 Push

AccountServer/구글 로그인(PC용)

설명(Description)

  • 구글 계정을 사용해서 로그인
  • 컨텐츠가 어느정도 구현되고 진행 예정

To Do List

  • AccountServer
    • 구글 로그인 관련 자료 리서칭
    • OauthControler, OauthService 생성 및 코드 분리
    • Oauth 관련 DB 설계
    • Oauth 유저 데이터 저장 및 로그인 로직 구현

참고 자료

Server/Logging 시스템 구축하기

설명(Description)

  • ZLogger를 사용해서 게임 서버 로깅 시스템 구축

To Do List

  • ZLogger 패키지 설치
  • Logger DI 처리
    • Microsoft.Extensions.DependencyInjection 패키지 설치

참고 자료

  • MangosSharp - 링크
  • Autofac 공식 문서 - .Net Core IServiceCollection DI 처리 방법

Client/캐릭터 피격 효과 구현

설명(Description)

  • 캐릭터가 적에게 피격을 받으면 캐릭터 메쉬가 0.1초간 빨간색으로 변한다.
  • 캐릭터의 체력이 0보다 작으면 회색으로 색깔이 변한다.

To Do List

  • 코루틴 사용해서 캐릭터 피격 효과 로직 구현

패킷 최적화

설명(Description)

  • 자주 호출되는 움직임 패킷을 Bitflag를 사용해서 최적화 해보기

To Do List

  • 패킷 압축 관련해서 자료 리서칭
  • [ ]

원거리 공격 구현

설명(Description)

  • 권총(Hand Gun)과 서브머신건을 가지고 공격을 하는 로직을 구현합니다.
  • 클라이언트에서 총을 발사하면 패킷을 서버에 전달하고 해당 패킷을 바탕으로 동기화를 합니다.
  • 클라이언트는 총알을 Pooling해서 처리합니다.

To Do List

  • 클라이언트/원거리 공격 로직 구현
    • 총알 프리팹 만들기
    • 탄피 프리팹 만들기
    • DamageBullet 패킷 추가 후 로직 작성
    • Gun Attack 애니메이션 로직 및 동기화 코드 구현
    • 총알 발사 & 탄피 구현
    • 피격 처리 로직 구현
  • 서버/원거리 공격 동기화
    • DamageBullet 패킷 추가 후 로직 작성
    • Gun Attack 애니메이션 동기화 패킷 코드 구현
    • 총알 발사 & 탄피 동기화
    • 피격 대미지 동기화

참고 자료

차 후 구현

  • 클라이언트/원거리 공격 피격
  • 서버/원거리 공격 피격 동기화

Client/Player코드 분리 및 PlayerSyncTransform 코드 작성

설명(Description)

  • 포톤(Photon) 코드를 참고해서 PlayerController 코드 작성
    • PhotonView
    • PhotonTransformView
    • PhotonRigidbodyView
    • PhotonAnimatorView
    • NestedComponentUtilities
    • IPunCallbacks
  • 기존 EnemyContorller와 MyPlayerController를 분리하던 것을 합쳐서 관리
  • Player의 각 동기화 관련 코드를 분리해서 관리
    • Animation, Rigidbody, Transform
  • 포톤의 동기화 코드를 참고
    • 포톤의 데드레커닝(추측 항법) 관련 자료 찾아보기

To Do List

  • PlayerSyncTransform 코드 수정
    • EnemyPlayer 분기 처리(IsMine)
    • 동기화 코드 수정

Client/InputSystem

설명(Description)

  • transform.position을 덜어내고 Input System을 사용

To Do List

  • Input System 패키지 설치
  • Input System 로직 작성

Server/EnterGame

설명(Description)

  • 서버에서 클라이언트의 게임 방 입장 처리 완료 => 클라이언트에게 Enter Game 패킷 전송

To Do List

  • [ ]
  • [ ]

Client/EnemyPlyer 애니메이션 싱크 처리

설명(Description)

  • 포톤(Photon) 코드를 참고
    • PhotonView
    • PhotonAnimatorView
    • IPunCallbacks

To Do List

  • EnemyPlayer 달리기(Run) 애니메이션 싱크 처리
  • EnemyPlayer 걷기(Walk) 애니메이션 싱크 처리
  • [Bug] 달리기 혹은 걷기 애니메이션에서 멈출 시 idle 애니메이션으로 전환이 안되는 문제

Server/아이템 동기화

설명(Description)

  • 게임에 입장 시 아이템이 생성되고, 생성된 아이템의 위치와 정보를 동기화합니다.
  • 게임에 있는 아이템에 대한 객체를 서버에서 관리합니다.

To Do List

  • 패킷 설계 추가
    • 아이템 관련 Proto 파일 분리
    • 아이템 스폰 패킷
    • ObjectInfo 패킷 분리하기
    • 아이템 장착 패킷
    • 아이템 변경 패킷
    • 아이템 줍기 패킷
  • ObjectManager에 Item 추가
    • GameRoom 아이템 Init 로직 구현
  • GameRoom 입장 시 아이템 생성 로직 구현
  • 아이템 로직 구현
    • 아이템 Swap(장착) 로직 구현
    • 아이템 줍기 로직 구현

Client/LeaveGame 처리

설명(Description)

  • 차 후 게임 종료 시 연결을 끊는 로직을 구현합니다.
  • 강제로 종료하면 LeaveGame 처리가 되지 않습니다.
    • 클라이언트가 Alt + F4를 눌렀을 시 정상적으로 게임 서버와 연결이 끊기지 않습니다.
    • 게임 구현 마무리 단계에서 Ping 체크 시스템을 넣어서 응답이 없는 클라이언트는 강제 연결 종료 처리 예정

To Do List

  • 클라이언트 LeaveGame 패킷 처리 로직 구현
  • 서버 LeaveGame 패킷 처리 로직 구현

Server/Ping 체크 시스템 적용

설명(Description)

  • 클라이언트가 비정상적으로 종료를 했을 때 종료하기 위한 시스템
  • 서버에서 빈 패킷을 클라이언트에 전달(Ping)하고, 클라이언트에서 패킷으로 응답(Pong)이 없으면 세션을 끊습니다.

To Do List

  • Server/Ping 시스템 코드 작성
  • Client/Pong 패킷 관련 코드 작성
  • Ping Pong 테스트

Client/다중 클라이언트 실행

설명(Description)

  • 멀티플레이 게임을 테스트하기 위한 다중 클라이언트 실행
  • 빌드 후에 유니티 클라이언트를 2 ~ 3개 까지 실행하도록 구현

To Do List

  • 다중 클라이언트 실행 코드 추가
  • 다중 클라이언트 실행 테스트

Client/WebManager

설명(Description)

  • Web 서버와의 통신을 담당하는 매니저
  • WebManager에 Post, Get, Update, Delete에 맞는 로직을 각각 구현

To Do List

  • Get, Update, Delete 메서드 로직 구현
  • Request와 Response 테스트
    • 테스트는 Rest API 서버 로직이 구현 된 후에 진행 예정

Client/아이템 만들기

설명(Description)

  • 인게임에서 사용 할 아이템 프리팹 생성
  • 아이템 프리팹 생성 및 이펙트 추가

To Do List

  • 아이템 프리팹 생성
    • 망치
    • 권총
    • 서브 머신건

참고 자료

  • 유튜브 골드 메탈 => 링크

캐릭터 움직임 동기화

설명(Description)

  • 클라이언트 캐릭터를 움직여서 위치 값이 변경되면 서버에 움직임 패킷을 전송
  • 클라이언트엑 전송 받은 Move 패킷을 다른 플레이어에게도 Broadcast

To Do List

클라이언트

  • 게임 서버와 이동 패킷 통신을 위한 초기 세팅
  • 이동 패킷 서버에 전송

서버

  • 클라이언트와 이동 패킷 통신을 위한 초기 세팅
  • 이동 패킷 클라이언트에 전송

Server/더미 클라이언트 테스트

설명(Description)

  • 더미 클라이언트를 사용해 게임 서버 부하 테스트

To Do List

  • DummyClient에 패킷 설계된 것 추가
  • EnterGame 로직 구현
  • LeaveGame 로직 구현
  • 디버그 성능 프로파일링 자료 수집
  • 성능 프로파일링 자료 분석하기

Server/Array.Copy에서 Buffer.BlockCopy로 변경

설명(Description)

  • Array.Copy보다 Buffer.BlockCopy가 성능적으로 이점이 많다고 해서 적용
  • 기본적인 컨텐츠가 구현이 완료된 상태에서 테스트 할 예정

To Do List

  • 성능 테스트 세팅
  • Array.Copy와 Buffer.BlockCopy의 성능 비교 (지표 확인)

참고 자료

  • 배열의 복사 - 어떤게 제일 빠르지? (Buffer.BlockCopy, Array.Copy) => 링크

Client/EnterGame

설명(Description)

  • 클라이언틍에서 게임 방 입장 처리
  • 게임 서버와 Enter game 패킷을 주고 받아서 입장 처리를 합니다.
    • 클라이언트에서 게임 방에 입장 시 서버에 Enter game 패킷 전송
    • 서버에서 게임 방 입장 처리 후에 클라이언트에게 입장 완료 패킷 전송
    • 클라이언트에서 입장 완료 패킷을 받고, 게임 방에 캐럭터 생성 및 맵 Load

To Do List

  • [ ]
  • [ ]

AccountServer/아이디 패스워드 로그인 & 회원가입 기능 구현

설명(Description)

  • 아이디, 패스워드, 패스워드 확인을 입력해서 회원가입을 하는 기능을 구현합니다.
  • 아이디와 패스워드를 입력해서 로그인 하는 기능을 구현합니다.

To Do List

  • DB 설계
  • 회원가입 기능
    • 회원가입 기능 구현
    • 회원가입 기능 API 테스트
  • 로그인 기능
    • 로그인 기능 구현
    • 로그인 기능 API 테스트

Server/ 서버 초기 코드 수정

설명(Description)

  • 서버 개발을 위한 초기 코드 작성

To Do List

  • 구글 Protobuf 설치 및 적용
  • 서버 초기 코드 세팅

Bug/플레이어 Rotation 동기화 오차 발생

설명(Description)

  • 플레이어 Rotation 오차 발생
  • 플레이어 Rotation 오차로 인해 원거리 공격 오차 발생

To Do List

  • move 패킷에 rotation 값 추가
  • rotation 동기화 코드 수정
  • 포톤 Rotation 동기화 코드 참고해보기

Bug 결과

  • rotation 오차가 있긴 하지만 대략 0.01 정도 발생한다.
  • rotation보다 position 오차가 더 크다.
    • 대각선으로 움직일 경우 0.06까지도 오차가 발생한다.

Client/EnemyPlyer Rotation 로직 수정

설명(Description)

- EnemyPlayer Rotation 동기화 처리
- Photon 코드 참고

  • 현재 게임에서는 케릭터가 움직이는 방향을 바라보도록 하기 때문에 동기화 하지 않습니다.
    • 나중에 케릭터의 스킬을 추가하면 스킬 시전 방향이 움직일 수 있도록 구현할 예정입니다.
      (ex. 모바일 게임 브롤스타드 => 참고 영상)

To Do List

EnemyPlayer Rotation 관련 패킷 추가
EnemyPlayer Rotation 동기화 코드 작성

  • transform.LookAt() 함수에서 Quaternion.Lerp()로 변경
    • Quaternion.LookRotation() 추가해서 회전 속도 계산

Client/Start씬 UI 수정

설명(Description)

  • 스타트 씬에 있는 로그인 버튼과 회원가입 버튼을 제거합니다.
  • 구글 로그인 버튼을 추가합니다.

To Do List

  • 로그인, 회원가입 버튼 제거
  • 구글 로그인 버튼 추가

AccountServer/EF Core => SQLkata 변경

설명(Description)

  • EntityFramework의 성능에 대한 신빙성과 자료 부족으로 인해 변경
  • 코드를 쿼리로 변경해주는 SQLkata를 사용하는 것으로 결정

To Do List

  • MySqlConnector, SqlKata 패키지 설치
  • MySqlConnector 정리 자료 읽어보기
  • MySqlConnector 코드 작성
  • SqlKata 정리 자료 읽어보기
  • SqlKata 사용해 쿼리 작성
    • AccountDb 코드 작성
    • OauthDb 코드 작성
  • AccountRepository 코드를 AccountDb 코드로 변경
  • OauthRepository 코드를 OauthDb 코드로 변경
  • Entity Framework 모델 부분 코드 제거
  • Entity Framework 패키지 제거

참고 자료

  • SqlKata 소개 => 링크
  • MySqlConnector_정리.md=> 링크
  • SqlKata 공식 문서 - SqlKata MySqlConnecotr 세팅 => 링크

Bug/벽 통과

설명(Description)

  • 벽이 통과 되는 버그 Ratycast로 해결하기

To Do List

  • Raycast를 활용해서 벽 감지
  • 벽 감지 시 이동 멈추는 로직 구현

참고한 자료

  • 유튜브 골드메탈 강의 => 링크

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.