[MMORPG] 네트워크, 패킷 처리
·
[MMORPG]
네트워크 처리*해당 프로젝트는 C++서버와 언리얼 엔진4을 연결하여 제작하였습니다.네트워크 처리목차어떤 방식으로 처리해야 할까?네트워크 동작실수코드어떤 방식으로 처리해야 할까?수정 전 생각인프런 강의를 보며 JobQueue를 만들었고 이를 World에 적용하여 패킷을 조립하려고 생각하였으나 당시 보여준것은 자신의 클래스에 정의 되어있는 함수를 실행시키는 것이였다그러다 보니 해당 구조에서는 World에 함수가 굉장히 많아졌고 관리하기 힘들었다 그래서 생각한 것이 모든 Object에 JobQueue를 넣으면 되지 않을까?라는 생각을 하게 되었고 당연히 동작은 잘 되었고 원하는 대로 플레이어, 몬스터에게 각각 필요한 함수를 실행시키면서 관리도 편했다 하지만 이는 작업 실행 순서와 동기화 문제 그리고 메모리 오..
[MMORPG] 플레이어 스킬
·
[MMORPG]
스킬 *해당 프로젝트는 C++서버와 언리얼 엔진4을 연결하여 제작하였습니다. 스킬 적용까지의 일지 입니다 목차 어떤 방식으로 처리해야 할까? 패링 내려 찍기 버프 검기 대쉬 어떤 방식으로 처리해야 할까? 처음 설계한것은 다음과 같습니다 다른 게임들을 보면 키 세팅이라는 것이 존재합니다 그렇기 때문에 키를 바꿔도 동작이 되어야 한다는 것을 중점으로 설계를 하였습니다 아이템 아이디, 스킬 아이디는 고유하기 때문에 다음과 같이 아이디값을 key로 주고 value를 BindAction(아이템, 스킬등..) 을 넣어 키에 대한 정보를 확인할 수 있도록 하였습니다 그럼 다음 문제는 "어떻게 실행을 하지?" 였습니다. 입력에 대한 정보를 얻고 Key(아이디) 값을 넣어 실행하기 위해서는 이전에 루키스 강의를 보면서 ..
[MMORPG] 상태 패턴 (일반 몬스터, 보스 몬스터)
·
[MMORPG]
AI (일반 몬스터)*해당 프로젝트는 C++서버와 언리얼 엔진4을 연결하여 제작하였습니다.일반 몬스터 (원거리, 근거리), 보스 몬스터 (패턴)을 사용할 수 있도록 상태 패턴을 이용하여 제작하였습니다목차어떤 방식으로 처리해야 할까?상태 패턴 결과물상태 정리상태별 처리 요약몬스터 코드 (.e.g 슬라임)어떤 방식으로 처리해야 할까?우선 큰 목표가 있었습니다간단한 AI 제작데이터로 Enemy에 대한 정보 관리또한 일반 몬스터의 경우는 근거리와 원거리가 있을 것이고 보스는 패턴으로 공격한다는 가정으로 만들었습니다.1. 간단한 AI 제작간단한 인공지능이 필요하였고 상태 패턴이라는 것을 알게되었습니다.상태패턴을 활용하여 여러 상태를 제작하고 Enter와 Leave 함수를 통해 상태를 변경하고 Update함수를 통..
[MMORPG] 충돌 처리
·
[MMORPG]
충돌 처리*해당 프로젝트는 C++서버와 언리얼 엔진4을 연결하여 제작하였습니다.충돌 처리까지의 처리 일지입니다목차어떤 방식으로 처리해야 할까?KD-TreeRadius SearchCollision Trace어떤 방식으로 처리해야 할까?충돌 이라는 것을 어떻게 처리해야할지 생각하였습니다힌트를 얻은것은 화살과 같은 발사체였습니다서버에서 화살을 Actor로 스폰하고 있었고 Actor들은 World가 관리하고 있었습니다 그렇기에 월드에서 이들의 정보를 요약하여 Collision간 충돌을 비교하면 되겠네?라는 생각을 하였고 충돌이 필요하다면 Actor로 만들어 사용하도록 유도하였습니다. 그 중에서 언리얼에서는 Trace를 사용하여 물체간 충돌을 확인하고 있었고 저 또한 이를 응용하고  싶었습니다그래서 Trace를 ..
[MMORPG] 약 3개월 간의 업데이트
·
[MMORPG]
이전 까지는 로그인에 관한 업데이트까지 진행을 하였다 마지막 업데이트가 5월 20일 부터 현재 8월 25일까지 약 3개월 간 본 게임에서 플레이 할 수 있도록 만들고 있다 마찬가지로 언리얼과 C++서버 그리고 MS-SQL을 사용하여 만들고 있다 이동부터 시작하여 가시거리와 AI 그리고 스킬을 제작하고 있으며 인벤토리, 친구, 파티, 퀘스트등도 제작하고 있다 앞으로 보스에대한 스킬을 만들 것이며 아마 10월쯤이면 전체적으로 시스템은 끝나있을 것이고 사운드, 파티클등의 비주얼 적인 부분들이 아직 미흡할 것으로 예상이 되어진다 이 글에서는 짧은 영상과 함께 마칠것이고 이때까지 만든 작업물들을 자세하게 만들었던 과정들이 천천히 올라갈 것이다 그래서 이 글을 보고 있다면 이후의 글들을 보며 바뀐것을 봐주었으면 한..
[MMORPG] 로그인 완성까지
·
[MMORPG]
로그인 완성까지 로그인 완성까지의 기록입니다 *해당 동영상에 나온 모든 작업은 전부 혼자하였습니다 목차 동영상 힘들었던 점 분산 서버 캐릭터, 애니메이션 패킷 (서버) 데이터베이스 (서버) 인증 코드 패킷 (클라이언트) 위젯 (클라이언트) 한글로 변환하는 작업 동영상 (사운드가 클 수 있습니다.) *다시 한번 재촬영 되었습니다 회원가입 및 로그인 캐릭터 생성 및 삭제 힘들었던 점 로그인 서버를 시작으로 게임서버를 제작할 것이었기 때문에 언리얼과의 연결, C++ 서버와 데이터베이스의 연결등 처음 작업한는 것이였기 때문에 굉장한 시간이 걸렸습니다. 특히 MS-SQL의 저장 프로시저를 제작하고 ADO에서 보낼때 많은 시도 끝에 적절하게 작성을 할 수 있었습니다. 그리고 로그인과 회원가입 그리고 캐릭터 생성 및..
[MMORPG] 언리얼 위젯 매니저 제작
·
[MMORPG]
언리얼 위젯 매니저 제작이전 부터 고민하였던 위젯을 관리하여 불필요한 오버해드를 줄이고 생성과 삭제를 관리하고 싶어 만들었습니다.목차불편했던 위젯 사용언리얼 위젯 매니저작동 방식중요 코드추가적으로 개선할 부분불편했던 위젯 사용위젯 사용에 대해서는 여러가지의 튜토리얼들이 존재하였습니다공식 홈페이지에서는 게임 인스턴스에 몰아 넣는 방법, 게임 모드에 몰아 넣는 방법을 알려주었고 그렇게 사용하였습니다 그러던중 과연 여기에 사용하는 것이 옳은것인가 생각하다가PlayerController가 맞지 않을까? 라는 생각에 이곳에 몰아서 넣었던 기억이 있습니다이 방법만 사용하다가 이곳은 입력을 처리하기 위함이지 위젯까지 처리해야 하나 싶어서 다른 방법을 찾고 있던 중 HUD가 눈에 들어왔습니다PlayerControlle..
[MMORPG] 언리얼과 네트워크의 연결
·
[MMORPG]
언리얼과 네트워크 연결 이번 프로젝트에서는 언리얼4.27버전을 기준으로 사용되고 있는 FSocket과 같은 API를 사용하여 클라이언트를 제작하고 자 노력하였습니다 목차 이전에 노력 네트워크 연결 구조 전체 동작 과정 중요 코드 추가적으로 개선할 부분 이전에 노력 이전부터 연결을 어떻게 하면 좋을지에 대한 생각은 늘 하고 있었습니다 저의 목적은 언리얼4의 기본적인 프레임워크에 얼마나 만족하면서 사용하면 좋을까에 대한 고민이 있었습니다 처음에는 네트워크 Actor를 만들어서 맵에 입장하고 BeginPlay가 실행되면서 소켓을 생성하고 연결하는 작업까지 한번에 했었던 적도 있었습니다 하지만 여러가지 어려움이 있었고 다시 본질을 파악해야 한다는 생각에 제공하는 데디케이티드 서버도 C++과 BP모두 활용해보고 ..
[MMORPG] 서버 아키텍처 설계
·
[MMORPG]
서버 아키텍처 이번 프로젝트에서는 제가 여러 자료들을 보면서 어떻게 서버를 만들어야 하는지에 대하여 고민을 하였습니다 그 고민들을 담고 싶었습니다 * 아직 미완성입니다 (지속적으로 수정 됩니다) * 참고 사진들을 해당 블로그가 공개용으로 생각한것이 아니기 때문에 가져온것이 있습니다 목차 I/O 모델 데이터베이스 CS구조 서버의 특징 서버의 구조 분산서버 시간 동기화 시뮬레이션 동기화 가시거리 *다음 사진은 (링크)에서 가져왔습니다 I/O 모델 Select는 채팅 프로그램을 만들고 언리얼과 처음 연결한적이 있습니다 그렇기 때문에 다른 모델을 선택하고 싶었고 IOCP의 경우 다른 논문을 보면 더 좋은 모델이 있다는 것은 보았지만 그래도 아직까지 IOCP를 사용한다는 글을 보았습니다 추가로 윈도우 전용서버 이..
[MMORPG] 데이터베이스 ADO 연결
·
[MMORPG]
ADO (ActiveX Data Objects)이번 프로젝트에서는 ADO를 사용하여 데이터베이스와 서버를 연결하였습니다ADO를 래핑하여 저장프로시저를 쉽게 사용할 수 있도록 하였습니다.목차ADO를 사용한 이유힘들었던 점ADO아키텍처 설계ADO 설정ADO 중요 구현ADO 최종 결과ADO를 사용한 이유ADO를 요즘에는 MS에서 더 이상 추가적인 업데이트가 없다는 글을 보았다하지만 그것과는 관계없이 ProudNet을 사용하면서 ADO를 사용하였었는데그때 들었던 생각은 나도 ADO코드를 직접 작성해보고 싶다는 마음 뿐이였다그래서 만들기 시작하였다 이때는 Dapper나 SqlKata 그리고 EF등을 몰랐습니다.힘들었던 점프라우드넷에서 직접 사용해보면서 익힌 경험을 통해 ADO의 구조를 이해하는 것은 다행히 어렵지..
[MMORPG] Protocol buffer
·
[MMORPG]
Protocol buffer 이번 프로젝트에서는 Protocol buffer를 사용했습니다 목차 Protocol buffer 설치 Protocol buffer 설정 언리얼 Warrning에 대한 해결책 자동화 Protocol buffer 설치 vcpkg을 이용하여 Protocol buffer 설치 이전에는 Cmake를 사용하여 설치하였지만 github를 보니 C++은 vcpkg를 이용하여 설치하라고 했기 때문에 vcpkg를 이용하여 설치하였습니다 vcpkg list Protocol buffer 설정 64비트를 사용 예정이기 때문에 vcpkg설치한 폴더/installed/x64-windows 안에 있는 release, debug, install를 복사하여 서버는 pch안에 pragam comment를 이용..
[MMORPG] 프로젝트 소개
·
[MMORPG]
프로젝트언리얼 엔진4 와 IOCP서버를 이용한 전반적인 MMORPG 콘텐츠 제작 개발 기간 : 2023.01 ~ 2023.11 (10 개월)개발 인원 : 서버 (1명), 클라이언트 (1명)개발 목표 : MMORPG 서버 및 콘텐츠 제작기술 스택 : C++, MS-SQL, Unreal Engine4 서버 라이브러리 : https://github.com/Apeirogon99/ApeirogonServerEngine서버 : https://github.com/Apeirogon99/Project_LD_Server클라 : https://github.com/Apeirogon99/Project_LD영상MMORPG 제작 결과 영상 시스템서버 처리 과정ADO 래핑언리얼 엔진4 연결FSM 인공지능충돌 감지가시거리데드레커닝서버..