44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
입력 로직 렌더링에 관하여 질문드립니다.
입력 로직 렌더링에 대한 설명을 들었을 때 MVC라는 패턴이 생각 났습니다. 제가 MVC에 대한 패턴은 자세히 모르지만 M(Model) : 실질적으로 바뀌는 곳 V(View) : 보여지는 곳 C(Controller) : 명령을 내리는 곳 이렇게 알고 있는데요. 해당 입력로직렌더링에 맞춰보니까 모델 : 로직 뷰 : 렌더링 컨틀롤러 : 입력 으로 연상되더라고요. 이렇게 이해해도 문제 없는지 궁금하며 혹시 부가적으로 MVC에 대해 설명을 해주신다면 감사하겠습니다. 사실... 저번에 면접보다 Unity의 MVC 패턴 설명해보세요. 라는 질문에 막혀버린 경험이 있어 질문드렸습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
node의 child
이런 경우를 몇번 봤는데 node의 child의 경우 new TreeNode<string>()해서 추가 하잖아요 이럴경우 변수의 이름이 없는 상태로 메모리 할당 될텐데 이름을 지정하지 않는 특별한 이유가 있는건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
최단 경로가 판단 되는 부분
다익스트라에서 int nextDist = distance[now] + adj3[now, next]; if(nextDist < distance[next]) { distance[next] = nextDist; parent[next] = now; } 제가 디버거 및 연습장 들고 변수들 써가면서 이해를 거진 다 했는데 이 부분의 용도가 조금 덜 분명해합니다 제가 이해한 대로 다익스트라를 설명하면 기본적으로 무한 루프에서 진행이 되고, 이 루프는 방문하지 않은 버텍스가 더 이상 없을 때까지 돌아갑니다 그리고 이 무한 루프안에 두개의 for루프가 도는데 첫번째 루프에서는 방문하지 않았고, 거리가 int의 최댓값이 아니거나(최초 시작지점을 거르는 용도) 최단거리인 버텍스를 찾아냅니다. 여기가 바로 지금 방문 할 버텍스가 되는 것이죠 이 버텍스에 방문했다고 기록을 해주고 난뒤 두번째 루프에서 현재 방문 중인 버텍스에 연결 되어 있으면서 방문하지 않은 다음 버텍스를 찾습니다 현재 방문중인 버텍스에서 다음 버텍스까지의 거리를 현재 버텍스까지 온거리에 더해 줍니다 그리고 if(nextDist < distance[next]) 이걸 통해서 이 다음 버텍스 까지의 거리를 기록하고, 이 버텍스를 현재 버텍스를 통해 도달 했다는 걸 기록해 준다는건 알겠는데 저 if문의 비교는 단순히 distance[next]에 int의 최댓값이 들어가 있는 걸 활용한 비교인가요? 아니면 뭐가 더 있는 건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
정적 배열 데이터 길이에 대해 질문드립니다.
정적 배열의 길이는 미리 초기화 해야 사용하며 길이를 변경할수 없지만 그래도 억지로 하고 싶으면 기존 배열 내용물을 복사 하고서 다시 자기가 원하는 배열의 크기로 인스턴스를 초기화하고 붙여놓는 것을 알게 되었습니다. 그래서 강의를 보다가 문득 더 알고 싶어서 개인적으로 아래와 같이 코드를 작성 했는데요. class Board { int[] data = new int[5] { 0, 1, 2, 3, 4 }; int[] data2 = new int[2] { 5, 6 }; int[] data3 = new int[10] { 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; public void Initialize() { Console.WriteLine($"data의 길이 {data.Length}"); Console.Write("data의 내용물 : "); foreach (int i in data) Console.Write($"{i} "); Console.WriteLine("\n"); data = data2; Console.WriteLine($"data2를 복사한 data의 길이 {data.Length}"); Console.Write("data의 내용물 : "); foreach (int i in data) Console.Write($"{i} "); Console.WriteLine("\n"); data = data3; Console.WriteLine($"data3을 복사한 data의 길이 {data.Length}"); Console.Write("data의 내용물 : "); foreach (int i in data) Console.Write($"{i} "); Console.WriteLine("\n"); } } 빌드 한 결과 아래와 같이 나왔습니다. data의 길이 5 data의 내용물 : 0 1 2 3 4 data2를 복사한 data의 길이 2 data의 내용물 : 5 6 data3을 복사한 data의 길이 10 data의 내용물 : 7 8 9 10 11 12 13 14 15 16 이를 통해 배열의 내용물은 빼고 단순히 길이 변경 가능하다는 것을 알게 되었는데 그렇다면 data의 주소는 어떻게 되는걸까요? 처음의 data의 길이가 data[0]의 주소번으로 시작해서 data[4]의 주소번으로 끝날턴데 data의 길이를 새롭게 정의하면 data의 첫주소가 바뀌어버리는 것인지, 아니면 data의 첫주소는 그대로 사용되고 그 기점으로 늘리고 줄어드는 것인지 알고 싶습니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
maketree static
main함수가 static이니까 maketree도 static으로 맞춰준다고 하셨는데 구체적인 이유를 알 수 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
랜덤액세스와 시간복잡도
안녕하세요 . 시간복잡도란 , 코드내의 변수에따른 컴퓨터가 실시하는 실제 연산개수를 나타내는건데 (실제연산개수를 나타내야 .. 시간복잡도를 따지는게 의미가 있기도 하고 . ..다만 극한개념이라 , 영향이 작은건 무시됨) public T this [int index] { get {return _data[index]} set {_data[index]=value; } } 의 시간복잡도는 상수처럼 무시되는데요 , 그 이유가 배열은 랜덤액세스가 가능해서인데 그 말인즉슨 컴퓨터는 배열[index] 를 추적시에 0부터 index 까지 메모리공간을 하나하나 타고 가는게 아니라 ( 이러면 index에 따라 계산횟수가 Count 개 만큼 나타내질수도 있는건데 ) 진짜 바로 해당인덱스의 메모리공간으로 워프가 가능해서 계산횟수가 1이 나오는건가요 ? 감사합니다. 좋은하루되세요
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
경로에 대한 정보
BFS 설명 하시면서 parent[], distance[] 같은 배열을 추가해서 플레이어가 움직인 정보를 얻을 수 있다고 하셨는데, DFS 이런걸 하지 않는 이유는, DFS에서는 갈 수 있는 경로를 끝까지 다녀 왔다가 길이 더이상 없으면 다시 이전 지점으로 돌아와서 다른 경로의 끝까지 진행하고, 이를 반복하는 특성 때문인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
Render함수로 넘어가지 않습니다
강의와 똑같이 작성했는데 while문에서 경과시간은 잘찍히는데 그 이후의 ahhaaha는 나오지 않고 타일들도 나오지 않습니다 ㅠ.ㅠ 뭐가 문제일까요? 디버그해보면 이렇게 찍히고 경과시간문 다음으로 넘어가지 않습니다 33보다 작으면 continue하기로 되어있는데 왜 넘어가지않는걸까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
Binary Tree 미로 생성 알고리즘 4:22 초에 관련하여 질문드립니다.
'벽으로 둘러싸여 있다는 가정을 해야 하기 때문에 size를 처음 입력할 때 반드시 홀수여야 한다'는 말이 무슨 뜻인지 정확히 이해가 되지 않습니다. 제 머릿속 생각으로는 4 * 4로 만들더라도 맵을 만들 수 있지 않나 하는 생각입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
25x25 초록색 원이 안나와요
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. using System; namespace Algorithm { class Program { static void Main(string[] args) { Console.CursorVisible = false; const int WAIT_TICK = 1000 / 30; const char CIRCLE = '\u25cf'; int lasttick = 0; while (true) { #region 프레임 관리 // 만약 경과한 시간이 1/30초보다 작다면 int currentTick = System.Environment.TickCount; if (currentTick - lasttick < WAIT_TICK) continue; lasttick = currentTick; #endregion // 입력 // 로직 // 렌더링 Console.SetCursorPosition(0, 0); for (int i = 0; i < 25; i++) { for (int j = 0; j < 25; j++) { Console.ForegroundColor = ConsoleColor.Green; Console.Write(CIRCLE); } Console.WriteLine(); } } } } } 강의들으면서 이렇게 코드작성을 했는데 이상태에서 실행하면 초록색원이 안나오고 프레임관리부분을 주석처리하면 나오네요 뭐가 문제일까요?
- [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
cmd에서 줄 간격 때문에 동그라미 25x25 출력하는 데 직사각형으로 보여요
삭제된 글입니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
elapsedTick
if( elapsedTick < 1000 /30 ) continue; 여기서 왜 30분의 1초마다 문을 열어주고 1/30초가 지나지 않았으면 기다려 줘야 하는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
안녕하세요. 프레임 속도가 바뀌지않습니다.
프로그램은 작동하고 있습니다. 그런데 속도를 10이나 1로 낮추어도 똑같이 일정속도로 가는데 왜이런 걸까요? 소스코드를 다운받아서 살펴봐도 똑같은데 따로 콘솔에 설정해줘야하나요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
안녕하세요. 마지막에 Render에서 질문이 있습니다.
마지막에 색상을 임시 저장하고 끝날 때 초기 색상으로 바꾸어 주는데요. 어차피 for문 돌면서 스위치문에 조건에 맞게 색상이 정해지는데 굳이 이전색상을 저장한 이유가 궁금합니다. 혹여나 실수해서 색상이 날라가서 복구할때 무슨색이었는지 확인하기 위한 것인가요?? 기본색을 저장해도 결국은 스위치문에 따라 맞는게 없어도 기본색상이 아닌 초록색이 될텐데 굳이 기본색상을 저장하는 이유가 궁금합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
연결리스트 이해가 안되서 질문드립니다.
if(Tail != null) { Tail.Next = newRoom; // 현재방이 103이라면 다음방에 104인 newRoom을 넣고 newRoom.Prev = Tail; // 여기서 왜 다음방의 전방에는 이 미 103이있는데 또 103을 넣는건가요? } Tail = newRoom; // 다음방에 104넣고 그전방은 103인데 103이 날라가고 104만 2개가 되는게 아닌가요? * 위에 내용이 이해가 가지않아서 질문드립니다. * 아니면 newRoom이라는 객체는 주소를 가지고 있는것이 고. Tail.Next에 newRoom 주소를 넣어 연결해주 고 newRoom.Prev의 주소에 Tail의 주소를 넣어 연결해 주는 것인가요? 마지막으로 Tail에 다음주소에 있던 newRoom의 주소를 넣어주는 건가요? 그럼 Tail.Next는 연결을 위해서만 존재하는 swap함수에 temp 같은 건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
3d mmorpg에서 맵데이터관리와 길찾기 알고리즘이 궁금합니다!
안녕하세요. 길찾기 AStar 알고리즘 너무 재미있게 들었어요 감사합니다. 궁금한게 강의에서 길찾기 알고리즘은 2차원 배열, 2d기반 베이스로 진행 하셨잖아요 여기서 너무 궁금한게 2d는 맵형태랑 길찾기 알고리즘이 어떤식으로 돌아가는지 강의를 듣고나서 감이 잡히는데 3d게임일 경우에는 어떻게 해야하는지 너무 감이 안잡혀요 그냥 단순히 2차원 배열에서 z축을 추가해서 3차원 배열로한다? 그런데 애초에 3d 게임에서 맵데이터를 어떤식으로 코드에서 해석할수있는 데이터로 변환해서 관리하는지도 잘 모르겠어요 2d는 강의 내용처럼 단순한 바둑판 처럼 2차원 배열로해서 관리하면 될 것 같은데 3d mmorpg 같은 게임같은 경우는 z축이 하나더 생기고 맵이 전부 직각이 아니잖아요? 언던같은 경우는 이제 곡선이 생기는데 그런 3차원 지형같은 부드러운 곡선 형태의 언덕도 있는 폴리곤 집합체인 메쉬같은 복잡한 형태의 3차원 지형을 어떻게 서버에서 코드로 해석할 수 있는 데이터로 변환 하는것 자체부터 아애 감이 안잡혀요.. 이게 감이 잡히면 비슷하게 AStar 알고리즘을 적용하면 될 것같은데.. 음.. ㅠㅠ 모르겟어요 도저히.. 그냥 제가 궁금한걸 다시 정리해보면 와우 같은 게임을 서버에서 몬스터 AI길찾기 알고리즘을 적용할 때 서버에서 복잡한 메쉬의 (곡선 등등) 3d 형태의 맵을 어떻게 데이터로 변형해서 관리하고 길찾기 알고리즘은 또 어떤식으로 적용하는지 너무 궁금합니다!! 좋은 강의 너무 감사하고 어떤 식의 주제든 좋으니까 강의 빨리 올려주세요 ㅎㅎ 해킹도 관심 있으신것 같은데 해킹 강의도 듣고싶어요(진심)!! 강의 너무 잼있고 퀄리티가 너무 높아서 돈이 하나도 안아까워요!!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
힙 이론을 보다가 질문드립니다.
해당부분에서 원래는 역 도장깨기할때 왼쪽자식노드가 오른쪽자식노드보다 커서 왼쪽으로 가서 역 도장깨기를 진행하였는데 만약 해당사진처럼 오른쪽이 더 크면 오른쪽으로가나요? 그러면 힙 트리 2법칙을 깨게되지않나요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
오른손 법칙 하다가 막혔습니다..
해당부분에서 자꾸 크러쉬나는데 PosX 가 1인상태로 _Dir 값이 2가 될 경우에 if나 else 문으로 빠지지않고 무한적으로 else if문으로 진입하여 결과적으로 PosX = 1 , PosY = 24일때 _board[25 (PosY(24) + frontY[2(1)] , 1] 으로 배열 사이즈가 넘어가면서 크러쉬가납니다. 왜 이럴까요 ㅠㅠ 맵은 Binary Tree 알고리즘을 사용하여 만들었습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
질문
일반적인 게임에서는 실시간으로 계속 렌더링해주는것이 자연스럽지만 공부차원에서 질문드립니다. Program.cs에서 지금과 같은 상황은 Initialize()와 GenerateByBinaryTree()에서 이미 tile이 다 결정되므로 렌더링하는 board.Render()는 한번만 호출하면 되는 것이 아닌가요? 혼자 복습하는차원에서 다시 만들다가 프레임관리쪽을 구현하지 않은 상태에서 Render()했을때 윗쪽 wall이 Empty로 구멍이 뚫리는 현상이 발생했습니다. 그런데 while loop를 구현하면 Render()가 루프 안에 없어도 위쪽 wall이 문제가 되지않습니다. 프레임관리와 위쪽 wall이 뚫리는것이 무슨 관련이 있을까요? (Render함수가 while loop 바깥에 있음에도 while loop를 지우면 문제가 생기고 다시 구현하면 문제가 사라집니다.) ------------------------- 문제상황과 질문을 정리하면 1. Render()는 한번만 호출되도 될 것같아서 while loop 바깥으로 뺐다. 2. 뺴도 문제가 없음, 그러나 while loop를 지우면 위쪽 wall이 Empty로 뚫리는 문제 발생 3. 분명 1에서는 Render()가 while loop 바깥에 있었음에도 문제가 없었는데 2에서 while loop를 지우는게 왜 Render()에 영향을 주는지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
자료구조 연결리스트 질문있습니다.
그림 못그려서 죄송합니다 ㅠ 그려가면서 이해하려고했는데, 결국 연결리스트가 추가되는 형식은 Room(LinkedListNode)이 담을 수 있는 data와 그리고 다음과 이전의 Room을 가르키는 참조변수 prev,next를 가지고있고 RoomList(LinkedList)는 AddLast가 호출될 때 Room객체를 생성하고 Head는 첫번째. Tail은 AddLast가 호출될때마다 생성되는 newRoom객체를 가르키면서 prev와 next를 계속 연결해주는 것이라고 이해하면될까요?