묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[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++ 공부중입니다. 아마 취업을 준비하게 된다면 유니티엔진을 중점으로 포폴을 만들 것 같습니다.) 끝으로 바쁘실텐데.. 너무 많은 질문과 제 허접한 글을 읽어주셔서 감사합니다...
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Util에 짠 코드가 잘이해 안됩니다.
Transform transform = go.transform.GetChild(0); 여기에서 게임오브젝트의 직속자식을 가지고 오는데 transform을 사용 한다는게 잘이해가 가질 않습니다... tansform은 위치와 관련된 컴포넌트 아닌가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock과 send 질문!
public void Send(byte[] sendBuff) { lock (_lock) { _sendQueue.Enqueue(sendBuff); if (_pendinglist.Count == 0) RegisterSend(); } } // private void RegisterSend() { while (_sendQueue.Count > 0) { byte[] buff = _sendQueue.Dequeue(); _pendinglist.Add(new ArraySegment<byte>(buff, 0, buff.Length)); } _sendArgs.BufferList = _pendinglist; bool pending = _socket.SendAsync(_sendArgs); if (pending == false) { OnSendCompleted(null, _sendArgs); } } 처음에 send에서 lock을 걸고 pendinglist의 Count가 0일 때만 RegisterSend()를 호출하는데, RegisterSend() 내부에서 while문을 돌며 sendqueue의 count만큼 pendinglist에 sendqueue 데이터를 넣어주고 있잖아요? 근데, sendqueue의 count가 2이상인 경우가 가능한지 궁금합니다.. 위의 Send에서 lock을 걸어두면 RegisterSend()의 호출이 끝날때까지 다른 Session이 접근 못하지 않나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
질문이있습니다
안녕하세요 선생님. class MyList<T> where T : Monster // T는 반드시 Monster 혹은 Monster를 상속받은 클래스여야 한다. 이 설명이 이해가 안가는데 T가 Monster 타입이어야되는 조건이 있는데 그럼 왜 모든 타입을 받을 수 있는 제너릭으로 만든건가요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
17:30 초 부근에 QueueUserWorkItem 테스트하는 부분에서
ThreadPool.SetMinThreads(1, 1); ThreadPool.SetMaxThreads(5, 5); for (int i = 0; i < 4; i++) ThreadPool.QueueUserWorkItem((obj) => { while (true) { } }); ThreadPool.QueueUserWorkItem(MainThread); for문 체크하실 때 5에서 4로 바꾸셨는데 저도 똑같이 했는데 출력이 안됩니다. 3이하로 내리니까 출력이 됩니다. 디버그로 쓰레드가 몇개 있는지 확인해봤는데 주 쓰레드 포함 5개밖에 없다고 뜹니다. 왜이럴까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReadOnlySpan관련
Rookiss님 강의 잘보고 있습니다. BitConverter로 ArraySegment<T> 또는 ReadOnlySpan을 new하는 부분에서 궁금한게 있습니다. struct는 stack영역에 할당된다고 하셨는데요 이걸 계속 쪼개서 new로 할당한다는 것은 Stack영역에 계속 복사된 부분만 새로 할당한다는 것이 맞나요? 만약 그렇다면 메모리에는 별 문제가 없는건가여?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ArraySegment관련 질문
6분쯤에 ArraySegment가 Struct라서 스택영역에 할당되고 BufferList에 Add할 때 복사되어 전달된다고 설명하셨는데 struct가 스택영역에 할당되려면 몇가지 조건이 있는 것으로 알고 있습니다. 예를들면 16바이트 미만이고 멤버변수로 class가 없어야한다 등등... 그런데 위의 조건과 상관없이 Rookiss님이 설명하신 내용대로 되는 이유가 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
A* 알고리즘에서, 벽을 마주보고 있는 경우에 대해서
Monster와 Player가 벽을 마주보고 있는 상태에서 가끔 Monster가 Player에게 제대로 오지 못하고 있는 것 같습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
설정 가져오기 내보내기.
"도구=> 설정 가져오기및 내보내기" 에서 본인의 비쥬얼 스튜디오 설정을 저장할수 있더라고요. 선생님 설정 하나 저장해서 crimsonasura@naver.com 으로 하나 보내주실수 없을까요? 가능하면 색상을 같이 맞춰서 따라해 보고 싶습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
시점 이동 관련 질문
현재 내가 보고 있는 시점으로 카메로 이동이 되는 것과는 반대로 카메라가 보고 있는 시점으로 내가 이동 하는 방법이 있을까요?