월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
파트4의 서버 파일이랑 다른건가요??
파트4에서 서버 프레임워크 강의를 보고 파트5로 넘어왔습니다.그런데 중간중간 서버 프레임워크 소스가 다른곳이 있는거 같은데요, 예를 들어 서버에서 사용중인 패킷핸들러 cpp에서 인클루드되어있는 파일이 현재 파트5 강의에서는 BufferReader.h와 BufferWrite.h를 포함하고있습니다. 파트4 기준으로 해당 헤더는 포함되어있지 않구요. 그리고 패킷 핸들러.h 에서는 현재 파트5에서는 MakeShared하는 부분을 언리얼과 구분 지어서 MakeShared, make_share로 강의를 해주셨는데, 애초에 파트4의 핸들러에서는 make_shared를 사용하지 않고SendBufferPtr sendBuffer = GSendBufferManager->Open( packetSize );소스를 이용중인것으로 보이는데요..혹시 제가 중간에 잘못본 강의가 있는걸까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
3D 이동 동기화
안녕하세요 강사님! 저는 강의 Part4,5 수강하고 서버 제작한 뒤에원래 제가 만들어놨던 컨텐츠에 서버 붙이는 중인데요 패킷 송수신까지 잘 마무리 되었고이동 동기화를 진행하는 도중에, 강의에서 연습했던 환경(평지)과 달리 제가 만든 컨텐츠에서는 울퉁불퉁한 지경도 있고 다양한 오브젝트들(몬스터, 건물, 나무...etx)이 있어 충돌을 고려해야 하는 상황인데요. 충돌이 발생하면 오차가 점점 커기는걸로 봐서 추측하건데,한 명의 클라이언트의 움직임에 대해서 각각의 클라이언트에서 충돌처리가 일어나기때문에 오차가 점점 커진다고 판단이 되었습니다. 이러한 충돌로 인한 이동 동기화 오차를 줄일 수 있는 방법으로는 어떤 방법이 있을까요?제가 생각해본걸로는.. 다음과 같은 방법이 생각났는데클라가 먼저 이동해서 발생하는 충돌이벤트도 같이 서버에 패킷으로 보내준다. (위치정보+방향+충돌이벤트)서버는 받은 패킷을 모든 클라에게 뿌린다. 다른 클라들은 해당 캐릭터를 기존과 같은 방식으로 이동시키되(방향으로만 전진) 충돌이벤트가 있다면 받은 위치정보로 AI 기능(?)을 활용해서 추가로 이동시킨다. 이러면 충돌이 발생할 때마다 AI로 움직여주고. 그럼 그 사이에 해당 캐릭터가 또 움직이면 움직임 자체에 텀이 생겨버릴것이라는 문제점이 나타나네요 ㅠㅠ.. 이러한 이동 동기화 문제점을 어떤방식으로 해결하는지 궁금합니다!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
외부 네트워크에서 접속에 대한 질문이 있습니다 !
안녕하세요 RooKiss님 항상 좋은 강의 올려주셔서 감사합니다..! 외부 네트워크 환경의 제 친구에게 언리얼 클라이언트를 보내준 뒤, 강의를 들으며 쌓아 올린 제 서버에 연결을 하려고 했는데, 서버 소스의 IP 주소 입력란에 127.0.0.1이 아니라 제 외부(공인)IP 주소를 입력하니 예외를 던지면서 서버 프로그램이 죽더라구요.. 제 소스 문제인가 싶어서 선생님께서 올려주신 서버 소스에도 제 외부 IP 주소를 입력해봤는데, 여기서도 예외를 던지며 프로그램이 죽었습니다. 혹시나 싶어 사설 IP주소를 입력했을 때는 서버프로그램이 죽진 않았지만, 클라 쪽에서 접속할 수 없었습니다. 포트포워딩도 해놓았습니다. 서버 소스에 문제가 있는 건가요? 아니면 외부 네트워크에서 클라이언트를 접속 받는 방법에 대해 제가 잘못 이해하고 있는 걸까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
Proto buf 관련 질문
강의 영상을 보면서 다른 프로젝트에 Proto buf를 적용하고 있습니다. 하지만 이를 연동하는 과정에서 서버에서 수정한 정보가 클라이언트로 넘어가지 않아 확인해보니 ServerPacketHandler.h의 내용 중 아래 내용에서 S1.h를 제가 만든 프로젝트의 이름으로 변경해도 계속 S1으로 바뀌는 것을 발견하였습니다. 서버 쪽에서 S1과 관련된 모든 것을 제 프로젝트의 이름으로 변경하였는데 바꾸어야 할 이외의 것이 있을지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
캐릭터의 점프 문제
안녕하세요 루키스님. 강의 영상을 보고 third person이 아닌 제가 만든 캐릭터와 애니메이션으로 새 프로젝트를 만들어 보고 있습니다.캐릭터의 이동과 이동 애니메이션까지는 잘 동작하지만 캐릭터의 점프가 되지 않아 고민입니다. 이전에 강의 정상에서는 보낼 상태 정보(움직이고 있는지, 아닌지)를 if (DesiredInput == FVector2D::Zero())로 판단하여 MOVE_STATE_IDLE과 MOVE_STATE_RUN을 구분하였는데 점프는 어떻게 구분해야 할까요?또, 점프 패킷을 받은 클라이언트는 이를 어떻게 처리해야 할까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
Recv 처리 과정 질문
안녕하세요 루키스님. 지금까지 패킷 수신 송신 과정의 흐름을 코드상에서 어떻게 흘러가나 이해해보려고 정리를 해보았는데, 이해가 잘 안되는 부분이 있어서 질문드립니다.일단 제가 이해한 Recv과정은 다음과 같이 이해했습니다.RecvThread에서 계속 일하면서 Packet받은거 큐에 넣는것도 알겠고큐에 있는걸 처리하기 위해 Session이 Handler한테 요청하는 것도 이해했습니다.이해가 안가는건. 그러면 Session의 HandleRecvPacket()을 호출하기 위해서는 GameInstance가 HandleRecvPacket()을 호출해줘야 하는데그러면 GameInstance가 HandleRecvPacket()는 누가 언제 어디서 호출을 하는것인가요???제가 흐름을 잘못 이해하고 있는건가요 ㅠㅠ?제가 이해한걸 그림으로 표현해보았습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
proto 파일에 내용 추가시 인식 오류
안녕하세요 루키스님. 제공해주신 예제 서버 파일 그대로 빌드하고 따라하면서문제없이 잘 진행되었는데, proto파일에 C_SPAWN과 같이 추가로 작업하면 인식을 못합니다. 내용을 살펴보니 Proto:: 에 C_SPAWN이 없다라고 나오는데재빌드, 껏다 켜보기, 다시 예제서버 다운받아보기, 루키스님 최신 강의에서 무료 protobuf강의 따라해보기 다해보았지만'추가'에 대한 인식을 못합니다.기존에 있던거는 잘 되구요... 다음 사진과 같은 상황입니다.추가 한 모습에러 뜨는 부분.. 물론 이 밑으로부터 빨간줄 천지입니다. 원인을 좀 찾아보려고 출력, 입력 라이브러리 다 찾아보았지만 경로 설정은 잘 되어 있습니다. python코드에서 혹시 이것인가 싶은거는 PacketGenerator.py 파일에서 import jinja2를 인식을 못하고 있습니다.혹시 이것때문일까요? 아니면 의심되는 부분이 또 있을까요?아 좀 더 실행해보니 proto파일 인식을 못하는것 뿐만 아니라 Protocol.pb.h과 같은 파일을 지워도 재등록을 안해주는 문제가 발생했습니다. 어떤 부분을 추가로 살펴봐야 할까요? ㅠㅠ 이것때문에 진행을 못하고 있네요..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
로직 스레드가 1개인 경우
강의로 지금까지 알려주신 구조가 로직 스레드가 1개인 경우라고 하셨는데,아래 영상에 7분 경에 나오는 오딘의 스레드 구조랑 크게 보면 똑같다고 보면 될까요?MMORPG의 성능 최적화 사례 공유 '카카오게임즈 - 오딘: 발할라 라이징' (youtube.com)그리고 또 영상에 13분 쯤부터 아키텍처를 설명해주는데 유저들이 게임 서버에 직접 안붙고, 게이트웨이에만 붙어서 플레이한다는데 이러면 서버를 기본적으로 2번 거쳐야되는 거 같은데 이렇게 해도 문제가 없는 걸까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
언리얼 엔진 서버 관련 질문
안녕하세요 강의 잘 들었습니다! 언리얼 iocp서버 강의는 찾을 수 없었는데 이렇게 강의해주셔서 감사합니다ㅠㅠ 강의를 다 듣고 나니 궁금한 것이 생겨 질문합니다!언리얼 엔진으로 멀티게임을 제작할 때, iocp 서버를 제작하여 연결하려면 에픽 런처에서 다운받은 언리얼 엔진이 아닌 언리얼 깃허브에서 릴리즈 버전을 다운받아 개발하여야한다는 말을 들었는데 사실인가요? 데디케이트 서버를 사용하지 않고 iocp 서버를 자체적으로 제작하여 연결하는 것을 기준으로 질문드립니다. 해당 강의를 따라 서버를 제작한다면 에픽 런처에서 다운받은 언리얼 엔진(5.3)으로 iocp서버를 제작하여 멀티게임을 만들 수 있을까요?유용한 강의 영상 감사합니다!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
멘토링 신청 질문
혹시 이번에 올라온 Live 강의 신청이 안되는거 같은데 자리가 꽉차서 그런건가요??
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
빌드 하면 MSB3073 -WaitMutex -FromMsBuild 에러가 발생합니다!
올려주신 코드를 빌드해보려 해도 MSB3073 -WaitMutex -FromMsBuild 에러가 발생합니다. 혹시 언리얼과 연동하기전에 기본적으로 해야할 설정이 있나요??비주얼스튜디오 인스톨에서 SDK와 언리얼 관련 내용은 다 다운로드 하였습니다. 언리얼 설정 시 기본 설정이 있다면 알려주시면 감사하겠습니다 ㅠㅠ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
[ 02.+Protobuf과+언리얼+연동 ] Protobuff빌드 에러가 납니다
>libprotobuf.lib(reflection_ops.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(text_format.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(dynamic_message.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(any.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(wire_format.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(descriptor.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(extension_set_heavy.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(map_field.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(arenastring.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(message_lite.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(generated_message_reflection.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>libprotobuf.lib(message.obj) : error LNK2001: 확인할 수 없는 외부 기호 __std_init_once_link_alternate_names_and_abort1>D:\UnRealProject\MMO\S1\Binaries\Win64\UnrealEditor-S1.dll : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다. 소스 그대로 받아 빌드를 했는데 에러가 나네요
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
Room에서 _objects 자료구조는 안전한가요?
bool Handle_C_LEAVE_GAME(PacketSessionRef& session, Protocol::C_LEAVE_GAME& pkt) { auto gameSession = static_pointer_cast<GameSession>(session); PlayerRef player = gameSession->player.load(); if (player == nullptr) return false; RoomRef room = player->room.load().lock(); if (room == nullptr) return false; room->HandleLeavePlayer(player); return true; } 잡큐에서 처리를 한다면 문제가 발생하지 않을거로 보이지만, 잡큐에서 실행하지 않고 room->HandleLeavePlayer 함수를 직접 호출하고 있습니다. _objects 자료구조에 접근하여 제거하는데요 Thread Safe 하지 않을거로 보여서요. 혹시 의도된건지 궁금합니다. 코드 흐름상 이정도는 알아서 수정하세요라는 느낌이 강하지만 혹시나해서 여쭤봅니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
RecvBuffer 관련
안녕하세요, RecvBuffer 관련하여 링버퍼를 사용하시지 않고 다른 방법을 이용하시던데, 강의에서 링버퍼를 별로 안 좋아한다고 얘기를 해주셨는데 이유가 있는지 궁금합니다. 매번 꺼낼때마다 앞쪽에 추가적인 공간이 더 있는지 확인 작업 연산이 더 들어가서 비효율적으로 느껴지긴 하네요..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
RecvBuffer는 락을 안둔다고 하셨는데 이럴경우는 어떡하나여?
틱 쓰레드를 하나두고 틱쓰레드에선 주기적으로 해야할 작업들을 하며, 무거운 작업을 처리해야 할때서버가 자기자신에게 Send 하는 식으로 PostQueuedCompletionStatus() 함수를 통해 Worker Thread로 작업을 넘기는데여이럴경우는 바로 Send 처럼 각자 세션들이 Recv를 하게 됩니다. 이런 구조면 ProcessRecv에서도 멀티쓰레드가 개입을 하기 때문에 락을 걸어야 할텐데 이 부분은 어떻게 생각하시나요? 실제 현업에서도 Recv에 락없이 사용하나요?제 구조가 잘못된 설계라고 보시나요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
06.+마무리 언리얼 솔루션 빌드가 안됩니다.
안녕하세요.06.+마무리.zip을 다운받아 풀고S1.sln 파일을 실행시키면 VS에서 프로젝트 내 파일들을 읽어오질 못합니다. 그래서 S1.uproject에서 Generate Cisual Studio Project File을 해주고 솔루션을 실행시키면 프로젝트 내 파일들이 잘 나옵니다.근데 빌드를 하면 다음과 같은 에러가 납니다. 1>[18/23] Compile [x64] S1Player.cpp cancelled 1>[19/23] Compile [x64] S1GameInstance.gen.cpp cancelled 1>[20/23] Compile [x64] S1Player.gen.cpp cancelled 1>[21/23] Compile [x64] ClientPacketHandler.cpp cancelled 1>[22/23] Compile [x64] S1.init.gen.cpp cancelled 1>[23/23] Compile [x64] BufferReader.cpp cancelled 1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(44,5): error MSB3073: The command ""D:\Epic Games\UE_5.2\Engine\Build\BatchFiles\Build.bat" S1Editor Win64 Development -Project="C:\Users\yesun\Downloads\06.+마무리\MMO\S1\S1.uproject" -WaitMutex -FromMsBuild" exited with code 6. 1>Done building project "S1.vcxproj" -- FAILED. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== ========== Build started at 5:33 PM and took 01.657 seconds ========== 마지막 5.3버전 예제도 마찬가지로 압축푼 프로젝트파일을실행하면 VS 에서 파일이 제대로 안나옵니다.하지만 06.+마무리.zip 과는 다르게 S1.uproject에서 Generate Cisual Studio Project File을 해주고 다시 VS 오픈해서 빌드하면에러없이 언리얼 에디터가 잘 실행됩니다. 제가 뭘 잘못 실행한건지 뭔가 세팅을 제대로 안한건지 왜 이런 현상이 일어나는지 알수 있을까요?