묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
궁금한거 있습니다.
ClientSocket 즉 Session 의 소켓을 CreateIoCompletionPort 를 이용하여 등록해주어야지만 IOCP 큐로 부터 통지가 오지않나요? WSARecv 만 걸었는데 어떻게 통지가 오는지 궁금합니다.
-
해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
학습 전 커리큘럼 관련 질문 드립니다
안녕하세요강의 커리큘럼에 대해 알고 싶은 게 있어 질문 드립니다 저는 현직 웹개발자인데1인 방치형 rpg 게임을 만들고 싶어서작년에 M1+C1 강의를 구매했다가 다시 듣기 시작했습니다 그런데 학습 전 수강평을 살펴보는데 M1 강의가 무산됐다는 글이 많더라구요그래서 무산된 프로젝트를 참고하는 것보단 완성된 프로젝트를 참고하고 싶어서컨셉이 MMO RPG라서 구매를 하지 않았던 M2 강의를 구매했습니다 그런데 이 프로젝트도 제 기억엔 작년 하반기나 올해 상반기쯤 마감 예정이었던 듯한데마지막 업로드가 얼마 전인 12월 17일이더라구요 그래서 강의 시작 전 조금 더 확신을 갖고 싶어서 질문 드리고 싶습니다바쁘시겠지만 긴 답변을 원하는 게 아닌 만큼퀄리티 떨어지는 AI답변 말고현 시점에서의 강사님의 직접적인 답변을 받아보고 싶습니다 강의 구매목록M1 + C1M2C# 개발시리즈 part1(C# 기초)C# 개발시리즈 part3(유니티 엔진)C# 개발시리즈 part4(게임서버)C# 개발시리즈 part7(Unity + C# 서버 연동 기초) 현재 언어는 다르지만 개념이 겹치는 걸 제외하고 위 강의들을 구매하였고 따로 unity 에셋 정도를 구매한 상태인데강의 금액도 금액이고 제가 이 강의를 수강하려면 적지 않은 시간이 들 거 같아서시작 전 강사님의 시선에서 제 학습 방향이 가능한 것인지 답변을 들어보고 싶습니다 질문 1위 강의들을 완강하고 기획과 아트 리소스를 변경할 수 있게 되면게임을 출시할 수 있을 정도의 완성 구조 소스코드를 제공받을 수 있는 것 맞을까요? 질문 2unity 에셋스토어에서 캐릭터 등의 리소스를 구매하여 사용하려는데가능할지 여부와 만약 그렇게 할 경우 주의 또는 참고해야 될 사항이 있을지 궁금합니다
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
강의 커리큘럼 질문 드립니다
안녕하세요강의 커리큘럼에 대해 알고 싶은 게 있어 질문 드립니다 저는 현직 웹개발자인데1인 방치형 rpg 게임을 만들고 싶어서작년에 M1+C1 강의를 구매했다가 다시 듣기 시작했습니다 그런데 학습 전 수강평을 살펴보는데 M1 강의가 무산됐다는 글이 많더라구요그래서 무산된 프로젝트를 참고하는 것보단 완성된 프로젝트를 참고하고 싶어서컨셉이 MMO RPG라서 구매를 하지 않았던 M2 강의를 구매했습니다 그런데 이 프로젝트도 제 기억엔 작년 하반기나 올해 상반기쯤 마감 예정이었던 듯한데마지막 업로드가 얼마 전인 12월 17일이더라구요 그래서 강의 시작 전 조금 더 확신을 갖고 싶어서 질문 드리고 싶습니다바쁘시겠지만 긴 답변을 원하는 게 아닌 만큼 강사님의 직접 답변을 부탁드립니다 강의 구매목록M1 + C1M2C# 개발시리즈 part1(C# 기초)C# 개발시리즈 part3(유니티 엔진)C# 개발시리즈 part4(게임서버)C# 개발시리즈 part7(Unity + C# 서버 연동 기초) 현재 언어는 다르지만 개념이 겹치는 걸 제외하고 위 강의들을 구매하였고 따로 unity 에셋 정도를 구매한 상태인데강의 금액도 금액이고 제가 이 강의를 수강하려면 적지 않은 시간이 들 거 같아서시작 전 강사님의 시선에서 제 학습 방향이 가능한 것인지 답변을 들어보고 싶습니다 질문 1위 강의들을 완강하고 기획과 아트 리소스를 변경할 수 있게 되면게임을 출시할 수 있을 정도의 완성 구조 소스코드를 제공받을 수 있는 것 맞을까요? 질문 2unity 에셋스토어에서 캐릭터 등의 리소스를 구매하여 사용하려는데가능할지 여부와 만약 그렇게 할 경우 주의 또는 참고해야 될 사항이 있을지 궁금합니다
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
JobTimer 구동 스레드
모든 스레드가 distribute하지 않고, 메인 스레드만 담당하게 해주면 락을 잡을 필요도 없지 않나요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
수업질문은 아닌데요^^
켠출 수강생 리뷰 이벤트] M1, M2, D1→ 여기에 이메일 주소 남겼는데 한번 확인해주시면 감사드리겠습니다^^ rookiss@naver.com 여기로도 보내드렸습니다^^ 감사합니다!
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
수업질문은 아닌데요^^
켠출 수강생 리뷰 이벤트 M1, M2, D1 → 여기에 이메일주소 남겼는데, 한번 확인해주시면 감사드리겠습니다^^ rookiss@naver.com 여기로도 보내드렸습니다^^ 감사합니다!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TryPop() 동작 관련 질문
0이 아닌 -countIncrease와 비교하는 이유가 다른 쓰레드들에 의해 internalCount가 이미 음수가 되어있는 경우 countIncrease의 증가로 인해 정확히 0이 되는 상황일때, 삭제 할 수 있도록 처리하기 위함이 맞나요? compare_exchange_strong에 의해서 oldHead가 최신 _head로 갱신되므로, 이미 pop된 객체에 대해 다시 접근한다거나, 쓰레드가 함수의 무한 루프에 빠지는 경우가 배제되는 것으로 이해했는데 맞을까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
로드맵 C#서버 C++서버 방향성 질문
안녕하세요 강사닙 C++ IOCP강의 정말 감탄하면서 잘 들었습니다. ( 되새김질 50번은 한거같네요 ) 양질의 강의 제공해주신 점 정말 감사합니다.현재 저는 대학교 3학년 복학 준비중이고, 졸업작품 제작을 염두에 두고 있는 상태입니다.로드맵 관련해서 질문하고 싶은게 있습니다. Unity의 part4 C#목차를 보면 C++서버와 동일하더라고요.근데 굳이 후순위에 배치하신점이 궁금합니다.( C++서버와 구조가 같아보이는데 들어야할까요? ) ( JobQueue같은 스레드 배치항목만 이해했다면 굳이? 싶어서요 ) 또한 unity시리즈의 데베쪽 강의와 연동쪽 (part 5~9 )를 듣고 싶은데, unity엔진에 대한 경험이 없어도 될까요?UE로 포폴을 작성할 생각인데, C++연동 강의를 듣고 UE공부를 할려고 합니다. (GAS 등 ) 이 때, 공부 순서를 어떻게 해야할지 감이 안잡혀서요...C#으로 데베연동쪽으로 컨텐츠 구현감을 잡고나서 하는게 좋을까요?분산서버의 경우 C#과 C++을 혼용해서 개발할 수 있을거 같은데, 이걸 위해서라도 C#을 공부하는게 좋을까요? ( 인증서버는 C#으로 구현하는 경우가 많으니 )
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
스레드 id를 출력할떄 메인스레드 id도 출력되나요?
메인스레드가 1번을 먹는것까지는 이해했는데 그 이후에 원래 1부터 6까지 전부 출력되는것이 맞나요? 루키스님 화면에서는 2에서 6까지만 출력이 되는걸로 보여서 질문드립니다 해결했습니다 감사합니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
생명주기를 위한 의도적 복사
안녕하세요 강의 정말 감탄하면서 잘 수강하고 있습니다. Job에서 보편참조로 받았는데 forward로 하지 않은 것은 Ref들의 생명연장을 해주기 위해 의도적으로 복사하기 위한 의도일까요?JobSerializer로 인터페이스를 제공한 쪽에서는 어차피 Job내부에서 복사를 일으키고 있으니 forwad로 전달하는 의도가 맞을까요?강의 코드를 매일 복기하면서 보고 있는데 정말 감탄이 나오네요 항상 감사드립니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
락프리의 실무에서 사용 질문
락프리 구조를 사용하지않는다고 하셨는데 락프리를 써야 서버의 성능이 제대로 나오는것 아닌가요? 오히려 너무 어려워서 제대로 만든것이 아니라면 서버가 죽거나 오류가 날수 있기때문에 안쓰는 건가요?락을 사용해서 데이터 하나에 접근을하면 싱글 스레드보다 성능이 낮을것같아서 질문드려요멀티스레드를 사용하는 경우가 실무에선 많이 없을까요? 아니면 boost.asio에 있는 lockfree자료구조를 사용하나요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
수업에서는 게임 로직 루프에서의 게임 틱(game tick)에 대해 다루지 않아 CPU 사용률이 항상 높게 유지되는 문제가 발생한다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
RewardPlayer함수 에 대해서
강사님 안녕하세요. Slot 번호가 중복되는 것을 방지하기 위해서이런식으로 HashSet을 사용하려고 합니다.이렇게 해도 괜찮은 해결방법인가요?여기서 SlotKey 는 HashSet<int> 입니다.
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
선 이동과 히트 판정에 대해 질문 드립니다.
안녕하세요. 루키스님!M2 코드를 분석하면서, 약간 다른 게임을 (브롤스타즈같은 모바일 탑뷰 슈팅게임) 만들고 있습니다.선 이동으로 구현하고 있는데, 서버 판정 이후 해결되지 않는 부분이 있어 질문 드립니다. 현재까지 구현한건 키보드 기반 간단한 이동 동기화 입니다. 이동 방법은 키보드나 조이스틱 기반의 선 이동으로 구현하려 합니다.지금 이동 코드는 루키스님 질의응답과 해외 커뮤 글을 토대로 아래 방식으로 구현 했습니다.0.1초마다 동기화를 시도함키보드 입력이 있으면 desirePos를 그 방향으로 0.1초동안 갈 수 있는 pos 를 찍음클라 판단으로 갈 수 있는 곳(벽X, 장애물 X) 이면 destPos를 갱신서버로 전송서버에서 정당한 이동 요청인지 판정맞으면 브로드캐스트각 클라에서 이동 패킷 수신 후 캐릭터 갱신 여기까지 하면 어느정도 자연스럽게 작동은 합니다.하지만 이동을 보낸 클라 입장에서 서버로 부터 받은 판정을 적용하는 부분에 어려운 부분이 있습니다.아무래도 선 이동이 예측 이동 후 보정이라 네트워크 지연으로 예측과 판정이 너무 많이 틀어지는 경우가 있을 것 같습니다.예를들어, 클라에서 단순 우측으로만 움직인다고 가정하고, x 축으로 10 -> 11 -> 12 -> 13 선 이동을 했다는 가정으로 시작하겠습니다.네트워크 지연으로 13에 도달했을 때 서버에서 10 이동 동기화가 왔다면, 선 이동 클라는 10으로 튕겨 버립니다. 그 후 방향을 바꿔 왼쪽으로 움직이면 10 -> 9 -> 8 -> 7 로 먼저 움직이겠지만, 이미 서버로 보낸 이동 좌표로 인해 11, 12, 13이 또 오기 때문에 캐릭터는 퉁퉁 튀면서 움직이지 못하는 상태가 될 것 같습니다.또한, 다른 클라에서 공격을 해도 히트 판정이 다 꼬여 게임이 이상해질 것 같습니다. 이 문제를 해결하기 위해 고민해보니, 클라에서 선 이동 버퍼(기록)을 둔다고 합니다.이 버퍼는 아래 문제가 생겼을 때 서버 판정을 다시 replay 하고, 서버 판정을 완료하면 다시 저장된 선 이동 버퍼를 replay 해 클라에서 너무 앞서나가지 않도록 하더라구요.선이동 버퍼의 index와 서버 판정의 index가 n 이상 벌어지면, 서버 판정 index의 pos 로 플레이어 위치를 되돌리고 클라 선 이동 판정을 다시 실행시킴. 서버 판정으로 이동할 수 없는 pos 라면, 해당 pos 로 되돌리고 그 그 이후 선 이동 버퍼를 replay 여기서부터 질문입니다만,이런 방법이 쓰이는 이유는 게임 전체의 공정성 때문 일까요?네트워크 문제가 있는 일부 클라는 계속 롤백되는 경험을 하지만, 다른 유저들은 서버에서 허가한 상태만 보니까요.보통 선 이동 버퍼와 서버 판정은 어느정도로 갭을 두나요?0.1초마다 동기화 한다고 가정 하고 이동 패킷은 ++1 인 정수형 인덱스로 구분한다고 했을 때, 저는 한 4 정도로 생각했습니다.선 이동과 서버 판정이 약 0.4초이상 벌어지면 롤백하고 다시 동기화 한다 입니다.히트 판정의 경우 클라들, 서버가 같은 ticktime을 공유하고 있고 서버에서 내려준 히트 시작 시간을 보내주면, 클라에서 timejob queue에 넣어두었다가 해당 시간이 되면 애니메이션을 시작하면 되지 않을까? 라는 생각 입니다.고민을 많이 해보았는데, 이 이상 생각이 안되어 질문 드립니다.바쁘시겠지만 답변 주시면 감사히 학습에 사용하겠습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
32bit threadID와 16비트 상위 WriteFlag에 대해
32비트짜리 threadID를 비트 연산으로 16비트 옮겨준뒤 짤라준 것을 WriteFlag에 담는 과정에서 손실이 일어나는거 아닌가요? 그래서 현재 ThreadID와 _lockFlag의 WriteFlag를 다시 16비트 옮겨준 값이랑 비교했을 때 일치하지 않는 문제가 발생할 수 있지 않나요? 강의 18:40초입니다. ( ThreadID를 16비트로 관리하지 않는 이유는 또 무엇인가요??? )
-
해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
Job Scheduler - Cache locality
Hello, games are known from deep performance optimizations that going to thinking about getting data alligned in cache lines. Does Job Scheduler isnt killing it? Isnt this days more like One room = one thread and everything is flaten to array of structs / structs of arrays without lambdas, linq and events? Isnt context switching adding pauses even if there is no allocs because of locks?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
mutex와 sleep 차이점
mutex도 커널로 sleep가 되는걸로 알고 있는데 스핀락을 구현하면서 sleep를 같이 구현하는것과 mutex를 사용하는것의 차이가 궁금합니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다
물론 회사마다 다르고 각 회사의 기존 스타일을 따라야 하는게 맞지만 독학하는 입장에서는 clang-format이 제공해주는 힌트들, 구글 스타일 가이드 혹은 인터넷에서 나오는 여러 c++ 스타일 가이드를 보면서 어떠한 스타일을 채택해 사용할지 고민이 됩니다미리 손에 익혀두며 학습하고 싶어 질문드려 봅니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
모바일 데이터 환경에서의 렉 현상 문의 드립니다.
안녕하세요 루키스님, 잘 지내고 계시는지요? 프로젝트를 하러 떠나간다라고 글을 남긴게 2월24일 쯤인 것 같은데, 어느 덧 출시를 앞두고 있네요. 어찌저찌 구글 비공개 테스트까지 진행중에 있습니다 하하.. 다름이 아니라 최근에 예상치 못한 이슈가 하나 발생하였는데, 어찌 해결해야 될 지 도저히 방법을 찾지 못해서 문의 드립니다. 실시간 사냥터에서의 캐릭터 움직임|전투 로직이 와이파이 환경에서는 꽤 원활하게 잘 이루어지는데, 와이파이를 끄고 모바일 데이터(네트워크) 환경으로 게임을 진행하면 캐릭터가 너무 '뚝 , 뚝' 거리면서 움직이더라구요. 뭔가 모바일 데이터 환경에서는 네트워크 통신 환경이 공유기 와이파이 잡아서 하는것보다는 불안정하고 속도도 느리니까 이런 현상이 발생하나 싶어서 GPT + 인터넷 자료들을 찾아보았습니다.서버와 클라 양 쪽의 소켓 옵션에서 socket.NoDelay = true; 을 켜주기도 하고, 서버 쪽에서 패킷 모아 보내기 Flush 틱도 10ms 정도로 줄여도 보고 했는데 끊김 현상이 크게 나아지지는 않더라구요ㅠㅠ. 사냥터에서 이루어지는 이동/스킬 패킷 같은 경우에는 UDP 프로토콜로 진행하고, 그외에 실시간성이 과하게 요구되지 않거나 신뢰성이 더 커야 되는 것들(채팅,아이템 구매, 판매 등)은 TCP로 진행하라라는 조언도 있기는 한데 정말 이게 유일한 방법인가 싶습니다.. 의외로 간단한 건데 제가 제대로 못 찾고 있는 것인지, 아니면 정말 UDP / TCP 두 프로토콜을 같이 써가면서 네트워크 통신을 하여야 이 문제를 해결할 수 있는 건지,, 왠만하면 선생님께 문의 드리지 않고 혼자 해결해 보려고 했는데 도저히 그럴싸한 답들을 찾지 못해서 부득이 문의 드려봅니다! 감사합니다. (아 참고로 서버는 OCI -> 오라클 리눅스에서 실행하고 있습니다.)
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Stomp Allocator의 Release함수에 대한 질문입니다.
예들 들어서, 할당된 메모리 주소가 0x1000~0x3000이고, 실제 사용하려는 메모리 위치를 0x2008로 반환받았다고 가정할 때,const int64 address = reinterpret_cast<int64>(ptr);const int64 baseAddress = address - (address % PAGE_SIZE);이 계산으로 전체 메모리 해제가 가능한가요? 메모리 해제 부분이 이해가 잘 안되네요..