묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
send 과정에서 멀티스레딩에 관한 질문입니다
//양질의 수업 감사합니다. 데이터를 보내는 과정은 수업에서 크게send() // 데이터를 큐에 넣고 보내는 사람이 없으면 직접 보냄register_send() // 비동기로 send 실행on_send() // 데이터 전송 후 콜백 함수총 3가지 과정입니다근데 여기서 lock 경합 상태를 방지하기 위해 누군가가 보내고 있으면 큐에 데이터를 넣기만 하고 다른 일을 하러 가고 실제로 보내는 스레드는 단 1개로 설계한 것처럼 보이는데 큐에 데이터를 넣는 과정도 lock 안에 있어서 데이터를 보내는 스레드가 일을 마칠 때까지 큐에 데이터 못 넣고 대기 상태에 빠지지 않나요? 그래서 결국엔 lock 경합을 예방하는데 도움이 되는지 궁금하네요뭔가 send_queue 이 자원은 object key를 따로 만들어서 딱 이 녀석만 상호배제해야 할 것처럼 생각이 드네요
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Json으로 데이터를 관리하는 방법에 대해 질문이 있습니다.
안녕하세요, 루키스님.강의에서 다뤄주신 부분은 아니지만,학교에서 다른 학생분들과 프로젝트를 하는 중에 Json으로 데이터를 관리하려는데 궁금한 부분이 생겨서 혹시나 싶어 여쭤봅니다...구글 스프레드시트에 데이터를 관리하면서 Json으로 불러와서 사용하고 있는데요.현업에서도 Json으로 데이터 관리를 많이 하시나요?기본타입이 아닌 Enum이나 Class타입인 데이터같은 경우, 시트에 문자열로 작성하고 Unity에서 사용할 때에는 리플렉션을 사용하여 동적으로 변환시키나요?다른 분들 작업하신 시트를 봤을 때에는 모든 시트에 첫 열을 index값으로 설정하셨던데, 어차피 Dictionary로 읽어온다면 유닛의 이름이나, 몬스터의 이름같은 값으로 첫 열을 설정하면 사용하기 더 편하지 않나요? 데이터의 첫 열을 index로 설정하는 이유가 궁금합니다.강의에서 다루시지 않은 부분에 대해 질문드려서 죄송합니다..구글에 검색해보면 "이렇게 이렇게 한다"라는 내용 뿐이지 왜 이렇게 하는지 납득할만한 내용을 찾을 수가 없더군요.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
ArgumentException 에러가 생겼습니다.
ArgumentException: An item with the same key has already been added. Key: 1System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) (at <1c8569827291471e9db0dcd976e97952>:0)System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) (at <1c8569827291471e9db0dcd976e97952>:0)RPG.Data.StatData.MakeDict () (at Assets/02.Scrips/Data/Data.Contents.cs:28)RPG.Managers.DataManager.Init () (at Assets/02.Scrips/Managers/DataManager.cs:21)RPG.Managers.Managers.Init () (at Assets/02.Scrips/Managers/Managers.cs:53)RPG.Managers.Managers.get_Instance () (at Assets/02.Scrips/Managers/Managers.cs:10)RPG.Managers.Managers.get_Resource () (at Assets/02.Scrips/Managers/Managers.cs:23)RPG.Scenes.BaseScene.Init () (at Assets/02.Scrips/Scenes/BaseScene.cs:22)RPG.Scenes.GameScene.Init () (at Assets/02.Scrips/Scenes/GameScene.cs:14)RPG.Scenes.BaseScene.Awake () (at Assets/02.Scrips/Scenes/BaseScene.cs:15) 이렇게 에러가 생겼는데 이미 Dictionary가 생겨났다는데 Init()함수 순서 문제인건지 모르겠습니다.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
Addressable 에러납니다...
Addressable설치 하고 에디터 Play하면 위와 같은 에러가 발생합니다... 버전 업/다운을 해봐도 마찬가지네요... 찾아보니 대략 이런 내용인거 같은데 해결을 못하겠네요 https://forum.unity.com/threads/addressablesgroupwindow-missing-styles-in-2022-3-1.1445899/
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
유니티 가격 정책에 대해 어떻게 생각하시나요?
대학생이고 제 주변에 해당 업종에 종사하시는 분이 안계셔서 마땅히 여쭤볼 곳이 없어 올려봅니다.현업 종사자셨던 루키스님께서는이번 유니티 가격 정책에 어떻게 생각하시는지 여쭤봐도 될까요?실제로 이번 정책으로 인해 유니티에서 엔진을 변경하는 개발사가 많을까요?프로젝트를 진행하는 중 엔진을 변경하는 경우가 많나요?위 주제들에서 벗어나기는 하는데, DirectX와 OpenGL 둘 중 하나를 공부한다면 어떤 걸 추천하시나요? 이유도 알려주시면 감사하겠습니다.(DirectX는 윈도우 환경에서 잘 돌아가지만, OpenGL이 각종 운영체제에 호환이 잘 되는 것으로 알고있습니다.게임 프로그래밍에 관해 찾아보다보면 DirectX를 공부하는 것이 중요하다고들 하시며, 국내 게임 업계 채용사이트를 참고하더라도 DirectX 지식이 있는 개발자를 우대하는데, OpenGL에 관한 우대사항이 없는 이유가 궁금합니다.)만약 4번에서 DirectX를 추천하신다면, DirectX9부터 11, 12 순으로 공부하는 것이 좋을까요? 아니면 12로 바로 들어가도 괜찮나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
게임 서버의 구조? 및 공부법에 대한 질문입니다.
안녕하세요! 루키스님 강의를 통해 서버를 공부하고 있는 한 대학생입니다.현재 학교에서 게임 서버와 관련된 전공이 따로 있지 않아 혼자 공부하며 졸업작품을 사전에 준비하려고 하는데요.게임에 사용되는 서버가 단순히 클라이언트를 연결해주는 서버 뿐만 아니라, 채팅 서버, 동기화 서버, NPC서버 등등.. 기능에 따라 분할하여 관리하는 경우가 많다고 들었습니다. (실제로 현업에서는 어떻게 관리되는지 모르겠지만 구글에서 찾아본 바로는 이렇게 알고 있습니다.)현재 MMORPG 게임 서버를 만드는 데에 있어서 어떠한 요구사항들이 필요한지 구조를 설계해보고 있는데,사실 현재 질문을 작성한 섹션까지의 강의를 보고 따라하면서도 코드가 잘 와닿지 않습니다.우선 제 생각은 처음부터 끝까지 우선 정독하며 코드를 따라 작성하며 다시 정주행하며 작성했던 코드들 하나하나 뜯어보고자 했는데, 현재 이해되지 않는 부분들을 이해하고 넘어가는게 좋을까요?또한 제가 처음부터 이쪽으로 공부했던 것이 아니라, 전과를 하여 전공지식에 있어서 부족한 점들이 있습니다. 특히 데이터 베이스나 웹에 대한 지식이 아직 없는데, 데이터 베이스를 공부한 뒤 서버를 공부하는 것이 좋을까요?해당 강의에서 알려주시는 서버에 관한 내용들은 위에서 제가 언급한 분할 서버들(채팅, 동기화 등)에서도 모두 활용이 되는 내용들일까요?아니면 전혀 무관하여 부가적인 공부가 필요할까요?클라이언트는 기존에 작게 프로젝트를 해본 경험이 있어 어느정도 익숙해졌다고 생각해 서버를 공부하기 시작한건데요.서버 프로그래밍이 매우 어렵다는 것을 알고 나름 강의를 수강하기 전 이론에 관해서도 어느정도 확립한 뒤 듣고있는데도.... 코드를 봐도 전체적인 흐름조차 잘 파악이 되지 않네요... 정상일까요?아니면 기본기가 부족하여 이해를 못하고 있는 것일까요?목표는 클라이언트 프로그래머이지만, 서버를 알고 클라이언트를 개발하는 것과 모르고 개발하는 것에 큰 차이가 있을 것이라고 생각해 작게라도 MMORPG를 한번 만들어보고자 하고 있는데, 어려운만큼 노력하면 되는건데도 시작점이 같지 않다는 핑계가 머리를 떠나지를 못하네요..아직 부족한 전공지식도 많은데 이런 내용들을 공부해도 괜찮은 걸까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓 SendAsync 예외 발생시 대처방법에 대한 질문입니다
안녕하세요 선생님! 강의 잘 듣고 있습니다유니티 연동하면서 간혹 클라에서 서버로 보내는 과정에서 세션 클래스의 SendAsync 부분이 예외를 발생시켜 pendinglist 를 비워주는 clear 함수를 호출 하지 못해if (_pendingList.Count == 0) RegisterSend();영원히 send가 막히는 경우를 발견했습니다 try { bool pending = _socket.SendAsync(_sendArgs); if (pending == false) OnSendCompleted(null, _sendArgs); } catch (Exception e) { RegisterSend(); // 수정한 부분 Console.WriteLine($"RegisterSend Failed {e}"); } 이렇게 RegisterSend(); 를 다시 호출해서 SendAsync 가 될때까지 시도를 하는 방식으로 고쳤더니 send가 막히는 현상을 없애기는 했습니다만제가 생각하는 이 대처방법의 문제는 sendAsync가 계속 예외를 발생시키면 무한루프를 만들어서 이게 맞는 대처방법인지 의문이 듭니다...
-
미해결C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
유니티 vscode 연결
유니티에서 external code editor 선택하는 창에서 vscode가 뜨지 않았습니다. 그래서 browse를 통해 선택해주었는데요. 그리고 스크립트를 실행해보니 External Code Editor application path does not exist 라는 문구와 함께 에러가 발생하고 monobehavior도 초록색으로 바뀌지 않으며 정상적으로 연결이 되지 않는 것 같습니다. 이걸로 몇 시간동안 끙끙댔는데 진전이 없네요;; 도움이 필요합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Quaternion.Slerp 적용하면 유니티 짱이 20~30도 쓰러져요.
화면 클릭해서 이동시 transform.LookAt(_destPos); 위 코드 대신부드럽게 회전하기 -- 아래 코드로 하면 마지막 멈출때 유니티 짱이 쓰러짐. ㅜㅜtransform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 5 * Time.deltaTime); //t는 회전 속도 trasform.LookAt(_destPos)일때는 쓰러지지 않습니다.
-
해결됨두고두고 써먹는 유니티 VR
Unity 버젼 질문드립니다
강사님 안녕하세요Unity 2021.3.4f1 LTS 버젼을 사용하는데프로젝트 생성 시 템플릿 종류가 2D, 3D, 2D URP 3가지만 있고강의에서 선택한 3D URP는 없는데다른 버젼을 설치해보면 템플릿들이 또 달라서..3D URP를 사용하려면 어떻게 해야되는지 확인 부탁드립니다~
-
미해결따라하면서 배우는 고박사의 유니티 기초
강의자료 다운로드가 가능할까요?
강의 너무 잘 듣고 있습니다. 리마인드 학습에 활용하려고 하는데 강의 자료는 받을 수 없는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
널레퍼런스 오류
온드래그 핸들러 부분에서 널 레퍼런스 오류가 뜹니다 44번 줄에서 에러가 난다고 뜨는데 이 부분을 모르겠습니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
Category 스크립트 작성할때 Equals에 대해 궁금한게 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. public override bool Equals(object other) => base.Equals(other);이 부분이 왜 추가가 되는건지 궁금합니다. 어짜피 Category 파라미터가 아닌 object형 파라미터는 재정의 안하면 자동으로 base의 Equals를 호출하는게 아닌가요? 이 부분이 헷갈려서... 질문드립니다
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
text가 아닌 TextMeshPro를 사용해도 괜찮나요?
2021.3.20f1 버전 사용중입니다.기존 Text가 UI의 Legacy 폴더 안에 있고 원래 Text가 있던 자리에 TextMeshPro가 있네요.인터넷을 좀 찾아봐도 TextMeshPro를 권장하는 사람들이 많더라구요시간이 지나면서 새로운 버전이 나온것 같던데 사용법이 비슷하면 TextMeshPro를 사용하는게 더 좋겠죠?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
펙토리 함수가 꼭 필요한건가요? 그냥 세션으로 받으면 안되요?
public void Connect(IPEndPoint endPoint, Session session) // 사용하는 부분//connector.Connect(serverEndPoint, () => { return new GameSession(); }); GameSession gameSession = new GameSession(); connector.Connect(serverEndPoint, gameSession);Func 형 말고 그냥 Session을 참조로 받아서 하면 안되나요? 코드가 돌긴 하던데..
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버엔진 수요에 관해서 질문드립니다.
대학 게임학과에 재학 중인 학생입니다.교수님과 게임서버프로그래밍에 대해 상담을 나누는 도중교수님께서 MMORPG를 포함한 대부분의 프로젝트에서 서버를 직접 만드는 경우는 거의 없고언리얼 데디케이트, 포톤, 프라우드넷 같은 이미 만들어진 모델이나 서버엔진을사용한다고 말씀하셨는데 정말인가요?보통 반대로 대부분의 프로젝트가 게임에 맞춰 서버엔진을 제작하는 줄 알았는데제가 알던 상식과는 너무 달라서 질문드립니다.
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
카트레이싱 환경관련 문의
안녕하세요, 수업은 다 듣고 실습부분만 조금씩 다시 따라가고 있는데요,카트레이싱에서 환경 구축을 다 하고, KartAgent 코드도 깃허브에 있는거 그대로 C# 코드 옮기고, AcadeKart 코드도 수정을 다 했는데, 이상하게 카트가 1번 웨이포인트 지나고 리셋이 됩니다. 파이토치와 유니티 책에는 OnEpisode 함수에 for문이 있는데, 넣고 빼고는 상관이 없더라구요, 웨이포인트를 이어가지 못하거나 중간에 충돌이라고 판단하거나 기타 리셋 조건이 문제인것 같은데, 어딜 봐야 할지 조언을 주실 수 있으신가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
NullReferenceException 오류 입니다 ㅠㅠ..
void Start() { Bind<Button>(typeof(Buttons)); Bind<TextMeshProUGUI>(typeof(Texts)); Get<TextMeshProUGUI>((int)Texts.ScoreText).text = "Bind Test"; } void Bind<T>(Type type) where T : UnityEngine.Object //reflection 사용 { string[]names = Enum.GetNames(type); UnityEngine.Object[] objects = new UnityEngine.Object[names.Length]; _objects.Add(typeof(T), objects); for (int i = 0; i<names.Length;i++) { objects[i] = Util.FindChild<T>(gameObject, names[i], true); } } T Get<T>(int idx) where T : UnityEngine.Object { UnityEngine.Object[] objects = null; if (_objects.TryGetValue(typeof(T), out objects)==false) return null; return objects[idx] as T; }기존에 Text를 TextMeshProUGUI로 바꾸고 using TMPro;도 추가했는데도 계속해서 해당 오류가 발생하네요...도저히 원인을 못찾겠습니다 ㅠㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
JobQueue 사용에 대한 질문
우선 저는 단순히 Lock 만 사용하면 무수한 경합으로 인해 성능적으로 손해를 볼 수 있어 Job Queue 를 사용하는 것으로 이해를 했습니다.그래서 이것저것 연습하면서 Job Queue 를 계속 사용하고 있는데 도중에 몇몇 의문이 생기어 질문을 드리게 되었습니다. Job Queue 를 사용하다보면 Job Queue 내에 또 다른 Job Queue 를 사용해야하는 상황이 발생하는데 이 부분은 문제가 되지 않을까요?아래는 예시 코드입니다.public void Function() { MatchingManager.Instance.Push(() => { ... User.Party.Push(() => { ... }); }); } Lock 처럼 사용하면 된다 라는 생각은 옳은 것인가요? 아니면 Lock 과는 달리 Job Queue 사용 시 주의 할 부분이 있을까요? 항상 양질의 강의를 제공해주셔서 감사드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
클라에서 build를 통해 만든 exe파일에서 이동동기화가 이루어지지 않습니다
안녕하세요 강사님! 다름이 아니라 강의를 따라해보고 그 뒤에 거의 흡사하게 한 번더 다른 파일에서 코드를 구현해보고 있습니다.그런데 서버에서 클라에 패킷보내는것까진 제대로 작동하는데(좌표확인까지됨) 클라에서 실제로 테스트를 위해 실행했을때 실질적인 플레이어캐릭터가 좌표 인식을 제대로 못하는 문제가 있습니다.구체적으로 첫번째클라를 실행하고 플레이어이동시키고잇는도중 두번째클라가 실행되면 두번째클라에서도 첫번째클라플레이어 이동이 제대로 동기화되어보이는데이후 두번째클라창으로 옮겨가서 플레이어를 이동시키면 첫번째클라창에서 타플레이어좌표이동이 플레이어오브젝트에 반영되지않고 방향과 상태만 반영됩니다. 이후 첫번째클라창으로 옮겨가 플레이어를 이동시키면 두번째클라창에서도 타플레이어좌표이동이 되지 않습니다. 와중에 서버에서 클라쪽에 패킷전송은 잘되고 있습니다.게다가 타플레이어가 실제로 이동한좌표로 가려고하면 충돌인식까진되는데 화면엔 타플레이어가 이동하기전 있던곳에 그대로 서있습니다이경우엔 보통 어떤부분이 문제인걸까요?ㅜㅜ+) break point 걸어놓고 유니티에서 확인해봤는데 유니티에서 실행하면 정상적으로 이동동기화 되는데 build를 해서 만든 exe파일에선 위와 같은 현상이 일어나며 적용이 안됩니다...