묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
코어와 프로세스, 쓰레드간의 관계에 대해서 궁금합니다
그림판 비유를 보면 컴퓨터에서 동시에 사용하는 프로그램마다 최소한 하나의 프로세스와 쓰레드를 가지고 있는데 컨텍스트 스위칭이 일어난다고 하면 코어 하나만 갈구는거 아닌가요? 그리고 아직 쓰레드를 직접 사용해본적이 없어서 잘 모르겠지만 메모리의 동기화를 보장하기 위하여 멀티스레드 프로그래밍에서 lock를 적극적으로 사용하는데 이러면 어느부분에서 성능향상이 일어나나요? lock을 사용하면 사용할수록 싱글코어와 다를것이 없다고 생각되서요 Web에서 종종 다루는 비동기적 처리를 하기 위해서 스레드를 사용하는건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
왜 이것은 실행이 안되나요? 두개의 차이점이 무엇인가요
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의자님의 지식과 역량에 감탄중입니다
아직 3번째 단계의 강의를 듣는중이지만 강의의 구성요소와 강의내용 그리고 강사님의 역량에 감탄하고 있습니다. 단순히 게임엔진에 대해서만 배우는 것이 아니라 데이터베이스, 운영체제, 자료구조, 알고리즘, 컴퓨터구조등 컴퓨터공학의 기저에 있는 여러가지 내용들을 짚어주고 넘어가신다는게 좋은 강의 같습니다. 거두절미하고 몇몇 여쭤보고 싶은 내용이 있어 질문 드립니다. 강의 내용을 듣다 보면 중간중간 보간법등에 대한 내용이 나와있는데 수치해석에서 나오는 개념들이더군요 수치해석과목같은경우에는 저희학교는 컴퓨터공학에서 다루지 않고 기계공학이나 수학과쪽에서 다루고 있는데 타학과 수치해석 과목을 듣는게 클라이언트 지망 개발자한테 도움이 될까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문있습니다!
안녕하세요. 좋은 강의를 보고 패킷모아 보내기를 테스트 해보고 있습니다. 강의와 같이 ServerSession을 500개 만들어서 테스트를 해보면 500개 까지 Connect가 안되고 400좀 넘어서 끝나버리는데(실행할때마다 달라요) 이게 피씨 사양과도 관련이 있나요? 아님 다른 이유가 있을까요? (선생님 파일을 받아서 실행해봐도 비슷해서요)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
System.ArrayTypeMismatchException:
Map.cs -> ApplyMove 및 ApplyLeave 함수 부분에서 오류가 간헐적으로 발생합니다. public bool ApplyMove(GameObject gameObject, Vector2Int dest) { ApplyLeave(gameObject); PositionInfo posInfo = gameObject.PosInfo; if (CanGo(dest, true) == false) return false; { int x = dest.x - MinX; int y = MaxY - dest.y; _objects[y, x] = gameObject; // 이 부분에서 오류 발생 함 } // 실제 좌표 이동 posInfo.PosX = dest.x; posInfo.PosY = dest.y; return true; } System.ArrayTypeMismatchException: 'Attempted to access an element as a type incompatible with the array.' 이라는 오류가 발생합니다.... 첨부파일에 있는 프로젝트 실행해도 마찬가지입니다 .NET Core 3.1 Protobuf( 3.12.3) Newtonsoft.Json (12.0.) 입니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
Vertex 인스턴스 생성하는 방법과 List를 이용하는 방법의 차이
안녕하세요! new Vertex();를 해서 하나씩 정점을 만들어야 한다는 단점 때문에 List를 사용한다는 부분에서 궁금한 점이 생겨서 질문 드립니다. List를 이용할 때도 new List<int> { }를 계속 해주는데 리스트의 배열은 뭐가 다르길래 인스턴스 생성 부담을 줄이게 되는 건가요? 말그대로 배열이라서 메모리를 아낄 수 있는 건가요? 얘도 계속 new를 해주는데 왜 인스턴스 생성해주는 것보다 부담이 덜한건지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
if (s_instance == null) 을 체크하는 이유는 뭔가요?
싱글턴 구현을 위해서 한번만 인스턴스하기 위해 넣는것이라고 이해했는데 맞나요? 다소 이해가 안가는 것은, GameObject go = GameObject.Find("@Managers"); 를 한 다음에 if (go == null) 을 체크해서 게임오브젝트를 하나만 생성하도록 제한해 두었기에, 다른 파일에서 강제로 여러번 인스턴스를 하더라도 어차피 결과적으로는 한번만 인스턴스가 되는 것 같아서요. 굳이 if (s_instance == null) 를 체크해야 하는 이유가 잘 이해가 안갑니다. ㅠㅠ 알려주세요!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
파일 생성이 안됩니다
15:12 에 GenPackets.bat 파일 실행하면 .cs 파일이 생성이 안됩니다... 내용을 몇번이고 다시 확인하면서 대소문자까지 구별해서 재시도 해봤는데 아무 변화가 없네요 관리자 권한으로 해보고 별걸 다해봐도 아무 변화가 없습니다 Blazor 강의부터 제대로 되는게 없어서 좌절하게되네요...
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
19:00 쯤 Player를 찾고 로그를 남기는 테스트에서
19:00 쯤 Player를 찾고 로그를 남기는 테스트에서 chatPacket.chat를 로그로 남긴 후에 GameObject를 Find할 때 메인 쓰레드에서 사용하라는 예외가 발생합니다. 혹시 제가 잘못 작업했나 해서 올려두신 자료를 받아서 해보아도 똑같이 try catch에서 넘어가질 못하네요 유니티 버전 2021.1.0b1에서 안되서 2019.4.17f1까지 낮춰봤는데도 안됩니다. 무언가를 빠트린거 같은데 찾기가 힘드네요 혹시 조언좀 해주실 수 있을까요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
존단위, 심리스??
바람의나라와, 리니지같은 두개의 맵으로 크게 나눌수있다고 말씀하셨는데 왜 전자가 더 구현하기가 더쉬운건가요? 그냥 단순히 바람의나라에서 맵을 좀더 넓히면 리니지같은 방식이 되는거 아닌가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
게임업계 현장에서 선호하는 언어는 C#과 C++ 중 어느 것인가요?
현재 강의를 통해 C#을 배우고 있는데 Rookies님의 추후 예정 강의에서는 C++을 다룰 예정이며 취업 목적의 강의를 진행하신다는 글을 봤습니다. 취업 목적으로 하려면 C#보다는 C++을 먼저 배워야 할까요? 아니면 단순히 엔진에 따른 언어차이라서 업계 선호의 차이가 없나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
가위바위보 문제풀이(영상과 다른 버젼)
제가 풀었던 방법인데 영상 보시며 공부하시는 분 참고하시라고 올려봐요. // 승리 무승부 패배 //1. 이기는 경우 -choice == (aiChoice+1)%3 (나와 컴퓨터의 숫자가 2차이면 내가 이김. 3이 넘어가면 %을 이용해 0으로 초기화) //2. 지는 경우 -(choice+1)%3 == aiChoice (1차이면 컴퓨터가 이김.) //3. 비기는 경우-choice == aiChoice (같으면 무승부) if (choice == (aiChoice + 1) % 3) Console.WriteLine("당신이 이겼습니다."); else if ((choice + 1) % 3 == aiChoice) Console.WriteLine("컴퓨터가 이겼습니다."); else { Console.WriteLine("무승부입니다."); }
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
class 안에서 자신을 재사용? 하는 경우
class TreeNode<T> { public T Data { get; set; } public List<TreeNode<T>> Children { get; set; } = new List<TreeNode<T>>(); } 이 부분에서 현재 정의하는 클래스 내부에 자신을 다시 사용하는 것이 왜 가능한 것인가요?(TreeNode 클래스의 정의 내부에 TreeNode가 사용되는 것) 이전부터 이렇게 사용하시길래 그냥 지나가려다가 궁금해서 질문드립니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
class Vertex 내용에 대하여 질문드립니다.
class Vertex { public List<Vertex> edges = new List<Vertex>(); } 이 부분이 좀 헷갈리는데요. edges의 List의 일반화 값으로 자기 자신인 Vertex 클래스를 넣어 리스트를 만들었는데 edges는 재귀호출같은 건가요?? 뭔가 링크드리스트의 노드만드는 것과 비슷한것 같기도 하고 아닌 것 같고 아리송해서... 구체적인 설명 부탁드리겠습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
3d 게임에서의 이동 동기화 패킷 관련해서 질문드려요.
1. 보통 3d게임에서 이동 동기화 패킷을 클라이언트가 ms단위로 보내는 걸로 알고 있는데 보통 초당 몇번의 이동 패킷을 서버로 보내야 케릭터 움직임이 부드럽게 동기화가 되는지 궁금합니다. 실무에서 어느 정도 정해진 평균치 같은게 있는지도 궁금해요. 2. 꼭 ms단위로 보낼 수 밖에 없는지 궁금합니다. 캐릭터의 다이나믹한 움직임 및 언덕 올라가기등.. 서버에서도 똑같이 시뮬레이션 할 수있다면 서버 클라 각자 이동 시뮬레이션을 돌려서 도착지점에서 동기화 해주면 될 것같지만 현실은 서버에서 그런 시뮬레이션 하기가 어렵기 때문에 클라가 그냥 무식하게 이동패킷을 막 쏘는 것 같은데 이런 경우는 현실적으로 어쩔 수 없는 부분일까요..? 이동 패킷 처리 비용이 너무 아깝네요.. 실무에서는 이런경우 어떤 식으로 대처하는지 궁금합니다. 타일 단위로 움직이는 2d나 턴제 게임서버 개발하고 싶네요.. 강의 항상 감사드립니다~!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
C++ IOCP서버와 Unity Client 연동 관련
안녕하세요. 제가 C++을 이용한 IOCP서버와 Unity C# Client 연동해서 게임을 제작해야하는 상황에 있습니다. 사실 C++로 구현된 서버인줄 알고 구매했는데 C# 서버에 대한 강의인거 같더라구요.. C++서버와 C#을 사용하는 Unity와의 연동 그리고 Unity 자체에 대한 이해도 부족 이것이 저의 가장 큰 걱정거리인데요. 이 강의를 들어면 Unity 서버에 대한 이해도가 생겨서 C++로 독자 서버를 구축하는데 있어서 괜찮을까요??.. 그리고 여쭤보고 싶은것이 있습니다 ㅠㅠ 서버도 배운지 얼마 안되고 더더욱 Unity는 잘 몰르는데 프로젝트는 진행해야하고 처음 서버 설계 과정부터 궁금한 점이 너무 많았고 검색을 해도 잘 나오지 않아서 어려움이 많았고 항상 궁금해했는데 도움을 주시면 정말 감사하겠습니다.. 1. C++을 이용한 IOCP 서버와 Unity C# Client 연동을 위해서 어떠한 것을 고려하고 작업을 해야하는지가 궁금합니다. Byte Stream 외에도 고려해야할 부분이 뭐가 있을까요? 2. Visual Studio와 Unity 연동 이라는 것이 Visual Studio에서 서버를 키고 Unity Client를 키면 접속이 되게 하면 끝인건가요? 처음 기본 환결설정에 대해서도 궁금합니다. 3. Unity는 사실상 싱글 스레드만을 사용할 수 있는 것으로 알고 있습니다. 멀티 스레드가 지원된다고는 하나 유니티 객체에 접근하는 순간 에러가 난다고 알고 있습니다 (주워 들은 내용인데 맞는지는 모르겠습니다) 그런데 멀티스레드 사용이 필요하게 될 경우 유니티에서는 단순한 연산 작업외에는 멀티스레드를 사용하면 안되는 것인가요? 코루틴 이라는 기능이 멀티쓰레드와 비슷하다고 알고 있는데 멀티스레드 기능을 코루틴이 대체해서 사용하면 되는건가요? 4. IOCP서버를 이용하는데 싱글스레드?? 제가 C++ IOCP서버를 구현해야 하는데 이 이유에 대해 타당하게 설명을 해야하는데 저부터가 의문이 듭니다. IOCP를 사용하긴 할건데 Unity에서 멀티쓰레드를 사용하지 못한다면 IOCP로 하는것이 의미가 있을까에 대한 의문입니다. 3번 질문과 연관이 되는 질문이긴 한데요.. 간략하게 제가 만들어야 하는 게임을 설명드리자면 RPG와 FPS 장르가 합쳐진 RPS 게임으로 다중접속이 필요합니다. FPS게임이기는 하나 반응에 민감한 전통 FPS 방식은 아니라 매 프레임마다 패킷을 전송은 하지 않아도 됩니다(TCP를 사용할 것이라는 뜻이기도 합니다) 어느정도 많은 인원의 동시접속을 받아야 하기 때문에 IOCP를 사용하긴 할 것인데 이 부분에 대해서 궁금합니다. 5. 1000명이 접속하더라도 로비에 모여서 4명의 플레이어가 파티를 맺고 4명의 플레이어가 오픈월드 및 던전에 들어가게 됩니다. 즉, 유저 입장에서 보기에는 4명의 파티만을 위한 1개의 오픈월드가 펼쳐지는 것이고, 서버 입장에서는 그러한 오픈월드가 250개가(250x4 = 1000명) 펼쳐지게 되는 것입니다. (Ex.배틀 그라운드) 이러한 게임을 만들고자 할 때 게임 서버를 처음에 어떤식으로 설계해야할지 잘 모르겠고 막막합니다.. 서버와 DB를 연동하는 방법은 간략하게 배워서 DB를 사용해야한다는 점은 알겠는데 그 외의 부분에 있어서 어떤식으로 구현을 해야할지 궁금합니다. 처음부터 너무 많은 질문을 적었는데 죄송합니다. 궁금한게 너무 많았는데 질문이라도 할 수 있는 상황이 생겨서 너무 길게 적게 되었네요. 질문에 대한 도움을 주시면 정말로 감사하겠습니다..!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 듣던 중 궁금한 점이 있습니다.
지금까지 강의를 듣던 중에 가비지컬렉터 부분이 궁금합니다. C#은 가비지컬렉터가 작동하는데, 가비지컬렉터로 인해 반응성이 좋지 않을 수 있다고 들었습니다. 그래서 가비지 컬렉터가 최대한 작동하지 않도록 해야 한다고 생각했습니다. 따로 관리를 하는 게 맞나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
"'Creature.type' 멤버를 숨깁니다"
TextRPG2 영상을 쭉 훑고 난 뒤에 제 힘으로 다시 처음부터 작성해보려고 했다가 하나 거슬리는 부분이 있어서 질문드립니다. // Creature 클래스 class Creature { protected CreatureType type; // ... } // Player 클래스 class Player : Creature { protected PlayerType type = PlayerType.NONE; // ... } 위와 같이 각 클래스 타입을 지정하는 줄을 작성을 하니, Player 클래스의 변수 "type" 부분에 초록색 줄이 그어지며 "CS0108: 'Player.type'은 상속된 'Creature.type' 멤버를 숨깁니다"라는 메세지가 뜹니다. 이것저것 건드려보다가 확인한 결과 Creature 클래스에서 맨 앞의 protected를 지우니까 초록줄이 사라진 것을 확인했습니다. 이 상황에서 protected가 있고 없고의 차이가 무엇인지 헷갈려서 질문드리고 싶습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
12:54분 관련해서 질문드립니다.
C# 문법에 관련된 질문이긴 한데, new GameObject { name = "@Managers"}; 의 의미를 모르겠습니다. 분명 매개변수가 하나인 생성자인 것 같긴 한데, GameObject 클래스의 생성자는 public GameObject(string name); 되어있습니다. 그럼 제 생각에는 new GameObject("@Managers"); 이렇게 만들어야 하지 않나 하고 생각하고 있습니다. new GameObject { name = "@Managers"} 와 new GameObject ("@Managers")와 차이가 있습니까?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강사님 포폴에 대하여 질문이 있습니다.
안녕하세요. 일전에 취업준비때문에 질문을 드렸던 수강생입니다. 다름이 아니라 제가 전에 학원을 다닌다고 말씀을 드렸는데요. 학원에서는 포폴을 우선적으로 유니티 즉, 디비나 서버 연동 없이 유니티를 우선적으로 해야한다고 그러더라고요.( Text 를 콘솔로 보여주는 것은 쉽지만, text를 렌더링해서 움직이는것 자체가 어렵다) 는 말씀을 하셔서 이 작업만 해도 오래 걸린다고 그러시더라고요.. 그래서 걱정이 많습니다. 제가 타분야 개발직군을 공부하다가 넘어왔는데 타 개발분야는 포폴을 기본적으로 프론트엔드, 백엔드, DB 이 세가지를 이용해 만들었는데.. ex) CRUD 게시판 그런데 정말 유니티만 가지고 취업에 성공할 수 있을 지가 의문입니다. 그리고 강사님의 내년정도 쯤에 나오는 취업을 위한 언리얼 엔진을 듣고 싶지만 저에게 시간이 많지 않습니다... 내년 3월 목표로 취업준비중입니다.( 취준생 생활이 어느덧 1년 11개월 째네요.) 그래서 정말 진지하게 궁금합니다. 강사님 요약을 하자면 1. 유니티만을 이용해 취업이 가능한지? (서버x 디비x) 2. 만약 1번이 불가능 하다면 어떤걸 준비해야 할지? (참고로 강사님의 강의 1, 2, 3 파트를 사서 현재 듣고 있고, 따로 C++ 공부중입니다. 아마 취업을 준비하게 된다면 유니티엔진을 중점으로 포폴을 만들 것 같습니다.) 끝으로 바쁘실텐데.. 너무 많은 질문과 제 허접한 글을 읽어주셔서 감사합니다...