묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
JWT의 유효기간에 대해서 질문이 있습니다.
방치형 게임의 경우 JWT의 유효기간을 어떻게 설정해야하는지가 궁금합니다. 방치형 게임은 특성상 유저가 AFK를 해두는경우가 많은걸로 알고있습니다.제가 이해한바로는 게임을 오래동안 켜놓아도 JWT의 유효기간이 지나버리면 다시 재로그인을 해서 JWT를 발급받아야하는것으로 이해했습니다.유효기간을 되도록이면 짧게하는게 보안적인 부분에서 이득이라고 생각되는데 이를 해결할 방법이 있을지 혹은 적절한 유효기간이 있는지가 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
유니티 캐주얼 모바일 MMORPG (M2) 강의 질문 드립니다. / 다른 강의 질문 양해 말씀 드립니다.
루키스님 안녕하세요.먼저 다른 강의에 대해 문의 드리는 점 양해 말씀 드립니다. [Rookiss 켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)해당 강의 구입을 고민중인데, M1과는 완전히 다른 강의 인가요?M1과 이어지는 강의인지 아닌지를 고민하고 구매를 결정할 생각입니다. 답변 미리 감사합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
M1 M2강의의 경우 어느정도 수준이 필요한가요?
기존 커리큘럼을 PART9까지 따라왔다면 충분히 수강가능한 수준인가요?아니면 유니티의 기본부터 다시 다루는 클래스인가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
makeshared에 대해
복습차원에서 다시 듣느데 혹시 자체적으로 만든 makeshared를 쓰는 이유가 메모리풀을 적용시켜서 sharedptr로 만드는건데 요즘은 그냥 new delete성능이 좋아서 그냥 써도 상관없다는것을 들었는데 그러면 그냥 지원해주고 있는 make_shared함수를 써도 성능상에서 아무문제 없는거 맞는거죠?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session의 수명 관리를 위한 Ref 카운트 관리 부분
안녕하세요. 수업 잘 듣고 있습니다. 감사합니다. Session 수업 부분에서Register함수들에서 owner = shared_from_this(); 를 Process함수들에서 owner = nullptr 를 해주는 방식을.한 군데에서 관리하는게 좋지않을까 하는 생각이 들었습니다.Session이 생성될 때 Init함수 같은 것을 하나 둬서멤버 변수로 들고 있는 각Event들의 owner에 shared_from_this()를 넣어주고(계속 들고 있는 상태로 유지)나중에 문제가 생겨서 Disconnect()를 호출해야 할 때,ProcessDisconnect함수와 소멸자 같은 부분에서nullptr로 밀어주는 식으로 한다면 비동기 함수에 걸어놓는 동안 session의 생명은 계속 유지가 될 것 같고, 매번 참조횟수를 늘렸다 줄였다 하지 않아도 되니 괜찮을 것 같다 생각했는데요.혹시 제가 잘못 생각하고 있거나미처 생각을 못한 부분이 있을까요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
수강생은 디스코드 강좌도 참여 가능한가요?
궁금합니다!
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
유니티 게임 개발 첫 발걸음을 이 강의와 함께하겠습니다
좋은 강의 제공해주셔서 감사합니다.1주차의 UI까지밖에 안해봤지만 상당히 즐겁게 따라가고 있는데요.주차별 강의를 따라가고 나서 각 코드들이나 시스템의 흐름을 파악하면서 강의를 따라가면 될까요?? 이런 질문을 드리기에 좀 쑥스럽지만.. 알려주시면 이정표 삼아 열심히 해보겠습니다.감사합니다!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
네트워크 궁금한점이 있습니다.
서버개발 내용에 대해 궁금한것이 있어서 질문드려요.메인 서버가 있고접속한 클라이언트 1,2가 있을때 메인서버를 통해클라이언트 1,2를 서로 연결만해주고 연결후에는 메인서버를 통하지 않고 연결이 가능할까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
RWlock
Reader-writer Lock 잘 시청하였습니다.그런데 인터넷 글 구경중 SRWLock라고 지원해주는것이 있던데 이거는 오래된된것이라 안쓰는 추세인가요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
M1 콘텐츠 폴리싱 부분에서 다뤄질 예정이었던
M1 콘텐츠 폴리싱 부분에서 다뤄질 예정이었던 부분중에 인벤토리 관련하여 궁금한점이 있습니다. 우루루 용병단과는 달리 개개인의 히어로가 서로 다른 장비를 각각 착용하는 시스템으로 만들거라고 하셨는데요 제가 구현한다면히어로에 리스트나 딕셔너리로 작은 인벤토리를 각각 들고있게끔 하고히어로가 아이템의 고유번호를 가지고 있던가 아이템이 히어로의 고유번호를 가지고 있어 해당 번호를 세이브 데이터로 저장하고불러올때는 착용상태인 아이템 중에서 그 번호를 이용하여 다시 착용하는 방식으로 불러온다 이정도 방법밖에는 딱히 떠오르지 않네요. 루키스님 강의를 보다보면 스킬을 구현하는것은 정답이 없지만 장비관련은 어느정도 현업에서 자주 사용되는 방식이 있다고 들었는데요 선생님께서 생각하시는 정답이 무엇인지, M1 폴리싱 파트에서 구현하실때는 어떤 방식으로 구현하실 예정이셨는지 궁금합니다! 그리고 한가지 더 T2 강의에 대해서 궁금한 점이 있습니다. T2 강의에서는 M1에서 다뤄지지 못했던 결제 우편 어드레서블 관리 등등 기능들에 대한 강의부터 시작하는지 아니면 다시 게임의 토대부터 쌓아가는 작업부터 시작하는 것인지도 궁금합니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
M1 최종코드 질문드립니다
M1 중단되면 최종적으로 17주차가 마지막코드인가요?스터디용으로 보고있는데 혹시 추후에라도 M1 완성되면 코드를 올려주시나요?
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
하반기 일정에 대해 궁금합니다
T2 진행과 관계없이 하반기에 M2는 진행하시는것 같은데, 언리얼 데디도 같이 진행이 되는건가요?그리구 서버는 뒤끝말고 직접구현하는 방식으로 갔으면 좋을 것 같아요.. 그냥 제 희망사항입니다 ㅎㅎ감사합니당
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
변경된 프로젝트에서 한번쯤 다뤄주셨으면 좋겠을법한 내용
안녕하세요. Rookiss님. 강의 정말 잘듣고있고 여러모로 도움이 많이 되고 있습니다~!!감사합니다. :) 다름이 아니오라 새로 진행될 프로젝트 T2 에서 한번 다뤄주셨으면 하는 바람에서 적어봅니다. 1) 방치형 혹은 디펜스 게임에서 유독히 Int32 범위를 넘어서는 큰 수들을 자주 볼수있는데 이 큰 수를 어떤 방식으로 처리하시는지 Rookiss 님의 노하우가 있으신지 궁금합니다. 2) 소규모 개발사들이 서버를 쓴다고 하면 뒤끝을 많이 이용하는 것같습니다. 서버 강좌도 좋지만 개인적으로는 뒤끝을 이용한 서버 운영 노하우(?) 를 배우는것도 실제 프로젝트에 바로 접목 해볼수 있을것 같아 뒤끝 연동으로 진행해주셨으면 하는 바람입니다. 이상입니다~!! 여러모로 고퀄리티의 강의 다시한번 감사드립니다~!!그리고 T2도 함께 화이팅하겠습니다~!!
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
M1에서 못한 강의 내용이 T2에 반영이 되나요?
안녕하세요 이 강의의 특징은 다른 여타 강의와 달리 컨텐츠 폴리싱, BM, 출시 운영 준비가 특징이라 여타 강의보다 강의료가 비싸도 인정한 커리큘럼이었습니다만 처음에는 7월까지 마무리해서 자료을 올려주신다고 하셨다가이제는 UI 문제가 생겨 중단이 되고 T2 를 이어 하신다 하셨습니다. 문제는 생길 수 있고 계획은 변경이 될 수 있습니다. 궁금한건 T2에서 m1 때 못한 컨텐츠 폴리싱, BM, 출시 운영에 관한 강의가 포함이 되나요? 답변이 필요합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
LLocalStack 을 main 밖에서 쓰면 에러가 나는 이유??
이런저런 실험 도중에 발견한 에러입니다 CoreGlobal::CoreGlobal() { GThreadManager = new ThreadManager(); GMemory = new Memory(); GSendbufferManger = new SendBufferManager(); GDeadLockprofiler = new DeadLockProfiler(); SocketUtils::Init(); LlockStack.push(1); LlockStack.pop(); // 에러 지점 } main 안에서는 문제 없었는데 코어글로벌 cpp 파일에서저 부분이 문제더라구요 push 까지는 통과되고 size 도 1로 늘어나는것을 확인했는데 pop() 하는 도중 크러시가납니다 혹시 이유를 알고 계신가요??
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
마이크로소프트 제공 SList 는 use-after-free 에 대하여 안전한가요??
마이크로소프트 제공 SList 를 모방하는 과정에서SList 는 여전히 use-after-free 에 대하여 취약하다고 말씀하셨는데 마이크로소프트에서 제공하는 SList를 사용 할 때도일반적인 상황에서는 안전한 것인지 궁금합니다제 생각에는 수업의 경우 메모리 풀이라는 특수 상황에서는 free가 일어나지 않으니 일단 안전한다고 생각하는데 메모리 풀이라 안전한 것이지? 그렇지 않은 경우는 또 어떨지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라연동 질문드립니다.
안녕하세요 루키스님 강의를 따라하면서 클라를 콘솔이 아니라 winapi를 이용해 연동에 성공했는데요.(싱글톤으로 서버 세션을 만듬)일단 연결이 된걸 확인했으나 클라에서 창을 닫고 나가면 deque헤더에서 액세스위반 크래쉬가 나더라구요.그래서 디버깅을 열심히 해보니 클라가 나갈때 CoreGlobal의 소멸자가 호출되고 그중에 SendBuffer매니저를 지워줄때 문제가 생기더라구요. 그래서 혹시몰라 CoreGlobal 에 delete 하는 부분을 없애봐도 프로그램이 종료 되면SendBufferManager::PushGlobal함수 호출 ->SendBufferManager::Push 함수 호출 되고 나가는 과정에서 Lock이 문제가 발생했습니다..아무리 제가 찾아도 문제를 못찾겠어서 기존에 만들어주신 더미클라이언트에선 콘솔을 닫을때 코어글로벌 소멸자호출을 확인하니까 아예 호출이 안되는걸 확인했고 이 문제를 해결하려고 여러방면으로 시도를 해봤는데 잘 되지않아서 질문드립니다..서버를 열지않은상태에서 클라를 닫을때 크래쉬가 안나는걸 봐선 클라문제는 아닌거같은데 어떻게 해결하는게 좋을까요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
9주차 소스코드 관련
안녕하세요맥북으로 강의를 수강하면서 따라하고 있는데,section 3 - 신규 BaseMap 강의의 TileMaps 폴더를 전부 날리고 M1에서 가져오는 과정에서한글이 들어간 파일명들 때문에 CustomTile을 제대로 불러오지 못하고, 이로 인해 NPC, 몬스터 등이 맵에 뜨지 않습니다.macOS의 경우 한글이 파일명에 들어간 경우 압축 해제할때 파일명이 깨지는 오류가 있습니다. 그래서 파일명이 깨지지 않게 하는 Keka 등의 macOS용 파일 압축 및 해제 도구를 사용해봤지만 타일맵들을 여전히 제대로 불러오지 못합니다.그래서 부탁드리고 싶은데, 혹시 @Resources/Tilemaps 폴더 내 한글로 된 파일들은 전부 영어로 바꾼 버전의 M1도 올려주실 수 있나요?강의를 수강하는데 오브젝트들이 안 뜨다보니 많이 불편하네요..
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
UE MMO 콘텐츠 구현은 언제쯤 출시 예정이실까요?
C# 서버 듣고 돈이 안아까워서C++서버랑 게임도 붙여보고 싶습니다.UE MMO 콘텐츠 구현은 언제쯤 출시 예정이실까요?올해 말까진 출시됐으면 좋겠는뎅
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Queue가 비어있을 때, TryPop 질문입니다.
shared_ptr<T> TryPop() { // [data][data][ ] // [head][tail] CountedNodePtr oldHead = _head.load(); while (true) { // 참조권 획득 (externalCount를 현시점 기준 +1 한 애가 이김) IncreaseExternalCount(_head, oldHead); Node* ptr = oldHead.ptr; if (ptr == _tail.load().ptr) { ptr->ReleaseRef(); return shared_ptr<T>(); } // 소유권 획득 (head = ptr->next) if (_head.compare_exchange_strong(oldHead, ptr->next)) { T* res = ptr->data.load(); // exchange(nullptr); 로 하면 버그 있음! FreeExternalCount(oldHead); return shared_ptr<T>(res); } ptr->ReleaseRef(); } } static void IncreaseExternalCount(atomic<CountedNodePtr>& counter, CountedNodePtr& oldCounter) { while (true) { CountedNodePtr newCounter = oldCounter; newCounter.externalCount++; if (counter.compare_exchange_strong(oldCounter, newCounter)) { oldCounter.externalCount = newCounter.externalCount; break; } } }void ReleaseRef() { NodeCounter oldCounter = count.load(); while (true) { NodeCounter newCounter = oldCounter; newCounter.internalCount--; // 끼어들 수 있음 if (count.compare_exchange_strong(oldCounter, newCounter)) { if (newCounter.internalCount == 0 && newCounter.externalCountRemaining == 0) delete this; break; } } }TryPop을 할 때는 ExternalCount를 증가시키는데head와 tail이 같을 경우에는 internal 카운트를 감소시키고 return 합니다.만약 push가 없고 pop만 반복된다면, ExternalCount는 계속 증가하고internalCount는 계속 감소하는것같은데 맞나요? externalCount 와 internalCount가 일정해야하는게 옳은 결과값 같아서 질문합니다.