묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
Addressable 스프라이트 파일 가져오기
현재 프로젝트에서는 스프라이트 single 타입으로 하나씩 가져오면서 사용중인데만약 스프라이트들이 하나의 파일로 묶여있을땐 어떻게 가져오고 사용법은 어떻게 해야하나요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문있습니다
안녕하세요! 강의 내용 복기중에 몇가지 의문점이 생겨 질문드립니다! 서비스에서 MaxSessionCount, SessionCount의미 -> 제가 이해한거로는 클라가 한명 연동 될 때마다 SessionCount가 1씩 증가하고 MaxSessionCount는 최대 허용 접속 수라고 이해하고 있는데 맞는지 궁금합니다.-> 이게 맞다면 한계치는 어느정도로 정하고 기준은 무엇인지 궁합니다. 리스너에서 AcceptEvent N개 사용의 의미-> StartAccept 부분에서 5개 만들고서 그거를 각각 Register에 등록했다는 말은... 동접 5명을 받을 수 있다는 의미인가요? -> 만약 동접 의미로의 N개 사용이라면 포폴 수준에서는 1개만 사용해도 무방한가요? 테스트해보니까 패킷 전송 속도에는 별 차이가 없어보여서요! C++ 서버 & 유니티 클라 연동 ? -> 패킷 정보가 Proto가 중간 역할 해주고 있고 직렬화 하면서 결국 정수로 데이터 핑퐁이라고 이해되고있는데 이게 맞다면 저런 관계의 연동에도 문제가 없나요? 이제 강의 막바지가 되어가고 복기를 쭉 해나가면서 질문들이 계속 나올것 같은데 지금처럼 커뮤니티 게시판에 질문드리면 될까요? 아니면 따로 질문 올리는 곳이 있을까요??
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
DataManager 질문
안녕하세요. 제가 인터페이스를 활용하는 방법을 정확히 몰라서 질문 드립니다.DataManager에서 아래 ILoader라는 인터페이스를 통해 MakeDict함수를 정의한 이유가 따로 있나요?public interface ILoader<Key, Value>{ Dictionary<Key, Value> MakeDict();}보통 어떤 경우에 인터페이스를 사용하시는지도 알고 싶습니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
BroadcastEvent 관련
BroadcastEvent 관련해서, 사실상 어떤 이벤트가 발생할 때마다 거의 모든 구독자들이 호출되는 상황인데, 이렇게 되면 코드 작성 당시에는 편할지 몰라도 너무 많은 계산 역량을 낭비하게 되는 게 아닌지 궁금합니다. 아니면 어차피 대부분의 호출은 맨 처음 if문(enum 타입 체크)에서 바로 종료되니 생각보다 부하가 없는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
GameLogic 쓰레드에서 모든 GameRoom을 처리하나요?
안녕하세요.강의를 듣다보니 궁금한 점이 생겨 질문 남깁니다.GameLogic을 담당하는 쓰레드가 있고 이 쓰레드에서 모든 GameRoom(GameRoom이 여러개 있을 때)의 코드들을 전부 실행하는게 맞을까요?? GameLogic에서 Update를 통해 자신의 Job을 Flush함과 동시에 소유한 GameRoom의 Update를 통해 쌓은 Job을 처리한다고 이해했습니다.그렇기 때문에 부하가 큰 Send 등의 처리를 다른 쓰레드(GameLogic 쓰레드에서 다른 쓰레드로)에게 넘기는 작업을 한거로 생각합니다.그런데 위처럼 하면 만약 GameRoom이 많아진다면 속도가 매우 느려질 거 같은데 따로 처리할 수 있을지 궁급합니다.제대로 이해하지 못하고 질문을 남겨 문맥이 이상할 수 있으니 감안해주세요 ㅠㅠ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문있습니다!
안녕하세요 루키스님.흐름을 이해하던 중에 이해가 안가는 부분이 있어서 질문드립니다. Accept부분에서 다음 그림의 순서로 흐름을 이해를 했는데이해가 안되는건Listner의 ProcessAccept부분에서session 가져와서 그 안의 소켓, 네트워크정보 업뎃해놓고그 다음 실행 부분인 RegisterAccept에서새로운 session으로 밀어넣으면 ProcessAccept부분에서 업데이트 했던 정보들이 다 날아가는것 아닌가 라는 의문점이 생겼습니다!! 제가 이해한게 맞다면 이 흐름대로 해버리면RegisterAccept에서 작업했던 session의 소켓 정보, 네트워크 정보는 다 날라가고 새로운 session으로 등록해버린거 아닌가요??
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
게임제작 컴퓨터 사양 질문
안녕하세요 강의 보고 열심히 공부하고있씁니다 우르르 용사단 이나 지금 저희가 하고 있는 프로젝트 스케일 정도는 컴퓨터사양 대충 어느정도 가 편안하게 렉없이 제작가능할까여 다른게임 비교하면 2D게임 탕탕 특공대 정도 스케일 정도요컴퓨터 구매할때 참고 하고 싶어서요
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
Managers.cs 질문
public static DataManager Data { get { return Instance?._data; }}와같은 프로퍼티들이 스태틱으로 되어있던데 스태틱이어야하는 이유가 따로 있을까요?그냥 외부에서 호출 할때 Manager.Instance.DataManager로 호출해도 되는데 이렇게 하신 의도가 궁금합니다. 또 위의 Data 프로퍼티의 정의에 보면 return _data가 아니라Instance?._data로 하셨는데 이건 C# 7.0문법인 ?을 사용하려고 그렇게 하신건가요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
1주차 스크립트 질문입니다
1. 강의를 듣고 선언된 두 딕셔너리의 용도라고 주석을 달았는데 맞을까요?2. LoadAllAsync 메서드- 주어진 label에 대해 모든 리소스를 비동기적으로 로드하고, 로드 상태를 콜백을 통해 알려주는 기능 수행LoadAsync 메서드 - key에 맞는 개별적인 리소스 로드 이렇게 해석했는데 맞나요??3.동기 작업의 결과 - opforeach문의 내용 - 스프라이트만 따로(우선적으로) PrimaryKey로 체크를 하고 로드 [사유 : 폰 이슈] else문에서 그외의 스프라이트가 아닌 것들을 로드
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
12주차 소스코드 실행하면 오류나네요
이 오류가 어떤오류인가요? 올려주신 파일 받아서 그대로 실행했는데 오류가 나요!~ 심지어 실행이 안됩니다. 타이틀 부터 게임 화면까지 맵이 없는건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
단순 궁금증) 멀티쓰레드가 아니라 싱글 쓰레드라면 sendQueue에 1개만 쌓이나요?
안녕하세요 루키스님단순히 제가 잘 이해하고 있는건지 궁금해서 여쭤보고자 합니다만약 멀티쓰레드가 아니라 싱글쓰레드라면 sendQueue에 1개 이상 쌓이지 않나요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하십니까 언리얼 엔진과 자체제작 서버와의 연동에 있어 궁금한점이 있어 글 작성합니다.
제가 수업을 통해 자체제작 iocp서버를 제작한 상황에서 언리얼 클라이언트와 연동하는 상황에서 제가 제 노트북에서 서버를 열고 클라를 접속하는 부분에서는 문제가 발생하지 않으나, 제 노트북에서 서버를 열고 다른 노트북에서 ip와 포트번호를 활용해 접속하니 접속은 되나 중간중간 잘못된 패킷을 보내는 등 접속이 끊기는 상황도 발생하고 있습니다. 혹시 언리얼에서 외부에 접속을 할 시 따로 설정해야하는 것등이 있는 건지 궁금합니다.
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
몬스터 Object Tile을 만든뒤로부터 이상한 에러문구가 발생합니다.
In order to call GetTransformInfoExpectUpToDate, RendererUpdateManager.UpdateAll must be called first.UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) 라는 오류가 발생하는데요. 현재까지 Play를 통해 게임을 실행할때 아무 영향을 주지 않으나, Unity를 처음 실행할때만 발생합니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
Open File in Solution
강의 중간중간에 Open File in Solution 이라는 팝업 띄우셔서 바로 클래스로 찾아가시는데 어떤 단축키를 눌러야 되는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Async와 Job방식의 차이가 궁금합니다.
이전 강의에서 PacketHandller 부분에서 Async를 사용하지 않고 Blocking 방식을 사용하는 이유가 EAP 기반이기 때문에 이미 패킷마다 할당된 쓰레드에 의해 I/O가 이루어지기 때문이라고 이해했습니다.하지만 GameRoom같은 경우엔 GameRoom 담당 쓰레드가 존재하고 GameRoom 쓰레드의 동기화를 위해 JobSerialize를 이용하여 각 쓰레드가 GameRoom의 Job을 Push하여 동기화를 진행하는데이때 Job 안에서 DB I/O가 Blocking으로 이루어질 경우 GameRoom 쓰레드가 Blocking이 되고 그렇게되면 GameRoom이 느려지는 상황이 되기때문에 DB I/O 전용 쓰레드(JobSerialize)를 만들어 쓰는것으로 이해했습니다.결국 개념적으로 봤을때 GameRoom 쓰레드는 메인쓰레드 역할을 하고 DB I/O 처리는 서브쓰레드에게 맡기고 완료됐을때 결과만 다시 메인쓰레드에 돌려받는 NonBlocking I/O 방식인데Async/Await 역시 호출한 쓰레드를 Blocking 하지 않고 서브쓰레드에게 I/O를 맡긴뒤 작업이 완료되면 메인쓰레드에 결과를 반환하여 Await 이후에 처리한다고 이해하고 있습니다.그렇다면 복잡하게 DB I/O 전용 쓰레드를 만들어주지 않고 Async/Await만 사용해도 될것같은데 이렇게 하는 이유가 있을까요?아니면 이후에 강의에 이에 대한 개선이 나오는걸까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
EF사용시 async사용
EF 변경사항을 저장할 때 SaveChangeAsync가 아닌 SaveChange를 사용하게되면 해당 쓰래드는 blocking이 발생할텐데 괜찮나요? 제 추측으론EAP 기반 IO 통신이기때문에 어차피 패킷요청마다 개별의 쓰래드에서 처리가되니 굳이 async를 사용안해도 다른 패킷(Thread)에 대한 blocking이 이러나지 않으니까 그냥 SaveChange를 사용한건가? 라고 생각하긴 했는데 선생님의 답변을 듣고싶습니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
zenject를 현업에서도 많이 사용하나요?
zenject를 배우고 이를 프로젝트에 활용해서 개발하고 있었는데 이번에 이 강의를 보고 배우면서 이전에 구현하던 방식에 좀 회의가 들어서요. 제가 zenject에 대해 완벽히 알고 있는게 아니라 개발 속도가 많이 느리기도 하고 진행 중이신 프로젝트를 zenject로 바꿔서 개발할 수 있을지 확신이 없기도 하네요..혹시나 다른 개발자 분들이 투입된다면 협업하는데 장애가 될까 걱정도 되서 질문 남깁니다.그리고 좋은 강의 감사합니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)
안녕하세요 오늘 첫 수업들었는데 질문 있습니다
1달차 처음 강의 영상봤는데 Managers질문 1 : 영상에서 나중에 보충수업에서 설명해주신다고 했는데 어디서 볼수있나요 ??질문 2: 혹시 공부중에 못따라가면 어떤 강의 보충 하면 좋나요 ?질문 3 : 디스코드 초대 어떻게 받을 수 있나요
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Sleep_for질문입니다.
12:00부분에서 작성하신 예제들을 따라치며 CPU점유율을 확인을 해보니 sleep_for을 쓰면 10언저리로 나오는데 Producer에서 sleep_for만없이 실행을 하면 CPU점유율이 0~2사이로 나옵니다. 영상에서 설명을 들으면 Consumer에서 무한루프로 체크하는것 때매 CPU점유율을 먹는다 라고 했는데 그렇다면 sleep_for도 없이도 점유율이 10언저리로 안나오는 이유가 뭔가요? 혹시 sleep_for로 인해 수면상태가 되어 Consumer스레드로 컨텍스트스위칭이 발생하여서 그로인한 오버헤드때매 CPU점유율이 증가했다라고 이해하면 되는건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
char8_t 관련 protobuf 질문
google Protobuf에서 한글을 보낼때는 utf8 형식으로 보내야하는 걸로 알고 있습니다. 그래서 u8을 앞에 붙여서 set_name()에 인자를 넣은거구요. 근데 C++언어 표준을 latest 로 해놓고 하면 google protobuf 쪽에서 char8_t 를 지원을 안해주어 컴파일에서 걸렸습니다..C++ latest 로 지정하고 u8을 하면 문자열이 const char8_t 로 변환되더라구요. 이전 C++ 17 이전으로는 u8을 해도 const char로 변환되었습니다. 그래서 기존에는 컴파일타임에 걸리지 않고 실행이 된것 같습니다.그래서이렇게 u8을 쓰지 않고 converter 를 통해 utf8 로 변환 후 패킷을 보냈습니다.이렇게 하니까 한글이 정상 출력이 되는 걸 확인했습니다..이런 방식도 나쁘지 않은 방식인가요...?제가 의심을 하는 이유는 codecvt_utf이 deprecated 된 것인데 경고를 무시하는 코드를 넣고 실행을 돌리기 때문입니다.C++ latest 에서 사용하기 위해서는 제가 생각한 최선의 방법이었습니다.좋은 방법이 있을까요