44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
스택과 힙에대해
스택과 힙에 대해서 공부를 더 깊게 하려면 자료구조를 공부하면 되는건지 궁금합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
hd 화질로 올려주실수는 없는건가여?
강의 가다보니까 갑자기 화질이 낮아지는데 이것좀 어떻게 해주실수 없나영?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
저... C가 파이썬보다 속도가 빠른것이... 맞나요??
삭제된 글입니다
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
저 ()를 왜 사용하나요??
삭제된 글입니다
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
실행자체가 않됩니다
삭제된 글입니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
class 관련 질문
우리가 cs파일을 생성하고 cs 파일 이름을 Program으로 하면 namespace CSharp { // ==================== 1번 위치 ================ class Progream { // ============ 2번 위치 =============== static void Main(string[] args) { } } } 이런식으로 기본적인 코드가 발생합니다. 여기서 궁금한점이 있습니다. 1번지역에 class를 선언하는 것과 2번지역에 class를 선언하는 것에 무슨 차이가 있는건가요??? namespace CSharp { // ==================== 1번 위치 ================ class A { } class Progream { // ============ 2번 위치 =============== class B { } static void Main(string[] args) { A a = new A(); B b = new B(); } } } 위 코드의 A처럼 바깥에 class를 선언해도 Main 안에 객체를 찍는 것에는 문제가 없어보입니다. 어떤 점에서 차이가 있고 언제 1번지역에서 class를 선언하고 2번지역세어 class를 선언해야 하는지 궁금합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
static 함수 관련 질문
공부를 하던 도중 static함수에 대해 헷갈리는 부분이 생겼습니다. 1. static 변수들은 데이터 영역에 값이 잡히는 것으로 알고 있습니다. 일반 함수들은 코드영역에 값이 잡히구요 그렇다면 static 함수들은 데이터 영역에 있는건가요 아니면 코드 영역에 있는 건가요? 2. c++이랑 다르게 namespace 안에 class들과 static 너무 많아서 헷갈리는 부분이 있습니다. 언제 static이 붙은 함수가 생기고 언제 static을 안 쓰는건지 헷갈립니다. namespace CSharp_연습용 { class Program { enum ClassType { None, Knight, Archer, Mage, } struct Player { public int hp; public int attack; } enum MonsterType { None, Slime, Orc, Skeleton, } struct Monster { public int hp; public int attack; } static ClassType ChooseClass() { Console.WriteLine("직업을 선택하세요!"); Console.WriteLine("[1] 기사"); Console.WriteLine("[2] 궁수"); Console.WriteLine("[3] 법사"); string input = Console.ReadLine(); ClassType choice = ClassType.None; switch (input) { case "1": choice = ClassType.Knight; break; case "2": choice = ClassType.Archer; break; case "3": choice = ClassType.Mage; break; } return choice; } static void CreatePlayer(ClassType choice, out Player player) { switch (choice) { case ClassType.Knight: player.hp = 100; player.attack = 10; break; case ClassType.Archer: player.hp = 75; player.attack = 12; break; case ClassType.Mage: player.hp = 50; player.attack = 15; break; default: player.hp = 0; player.attack = 0; break; } } static void CreateRandomMonster(out Monster monster) { Random rand = new Random(); int randMonster = rand.Next(1, 4); switch (randMonster) { case (int)MonsterType.Slime: Console.WriteLine("슬라임이 스폰"); monster.hp = 20; monster.attack = 2; break; case (int)MonsterType.Orc: Console.WriteLine("오크가 스폰"); monster.hp = 40; monster.attack = 4; break; case (int)MonsterType.Skeleton: Console.WriteLine("스켈레톤이 스폰"); monster.hp = 30; monster.attack = 3; break; default: monster.hp = 0; monster.attack = 0; break; } } static void Fight(ref Player player, ref Monster monster) { while (true) { monster.hp -= player.attack; if (monster.hp <= 0) { Console.WriteLine("승리 했습니다"); Console.WriteLine($"남은 체력, {player.hp}"); break; } player.hp -= monster.attack; if (player.hp <= 0) { Console.WriteLine("패배했습니다"); break; } } } static void EnterField(ref Player player) { while (true) { Console.WriteLine("필드에 접속했습니다"); Monster monster; CreateRandomMonster(out monster); Console.WriteLine("[1] 전투 모드로 돌입"); Console.WriteLine("[2] 일정 확률로 마을로 도망"); string input = Console.ReadLine(); if (input == "1") { Fight(ref player, ref monster); } else if (input == "2") { Random rand = new Random(); int randValue = rand.Next(0, 101); if (randValue <= 33) { Console.WriteLine("도망치는데 성공했습니다"); break; } else { Fight(ref player, ref monster); } } } } static void EnterGame(ref Player player) { while (true) { Console.WriteLine("마을에 접속"); Console.WriteLine("[1] 필드로 간다"); Console.WriteLine("[2] 로비로 돌아가기"); Console.WriteLine(); string input = Console.ReadLine(); switch (input) { case "1": EnterField(ref player); break; case "2": return; default: break; } } } static void Main(string[] args) { while (true) { ClassType choice = ChooseClass(); if (choice == ClassType.None) continue; Player player; CreatePlayer(choice, out player); EnterGame(ref player); } } } } 위와 같이 TEXTRPG 코드에서 3. Main 옆에 왜 static이 붙는건가요? 4. Main을 제외하고 나머지 함수들(CreatePlayer, EnterField등)은 class Program에 소속된 함수인 것 맞나요? 5. 만약 나머지 함수들이 class Program에 소속된 거라면 왜 static을 붙이는 건가요? static 함수들은 클래스에 종속적인 것이지 특정 객체에 종속적인 것이 아닌 것이라고 말씀해주셨습니다. Main이란 함수와 나머지 함수들이 현재 Program이란 클래스에 다 같이 있는 것이니까 나머지 함수에 static이 없어도 Main 안에서 작동해야 하는 것 아닌가요? 6. 질문하면서 떠오른 코드가 static void Main(string[] args) { Program p1; while (true) { ClassType choice = ChooseClass(); if (choice == ClassType.None) continue; Player player; p1.CreatePlayer(choice, out player); EnterGame(ref player); } } CreatePlayer 함수에서 static을 제거하고 Program의 객체 p1을 찍어서 p1이 호출한 함수로써 CreatePlayer을 쓰면 되지 않을까 했는데, 할당되지 않은 p1 지역변수를 사용했다는 안내가 나옵니다. 어떤점이 문제인 것인가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
ref, out 강의에서 질문
Rookiss님 안녕하세요? c++ 강의를 듣고 다음을 기다릴 수 없어 c#까지 넘어오게 되었습니다. 항상 좋은 강의 기대하고 있습니다. c# ref 와 out 강의에서 궁금한점이 있습니다. 메서드에서 return을 하나밖에 해줄 수 없는 점을 극복하기 위해 out 키워드가 있다고 하셨습니다 질문 1. c++에서 #include <iostream> using namespace std; void add(int& a, int& b) { a++; b++; } int main() { int a = 1; int b = 2; add(a, b); cout << a << endl; cout << b << endl; return 0; } 위와 같은 코드로 레퍼런스 &를 사용하면 return이 마치 2개인 것 같은 효과를 낼 수 있습니다. 하지만 c++ 수업에서는 return을 여러개 한다는 것을 강조? 말씀하시지 않았는데 왜 그런지 궁금합니다. C#은 c++과 다른 목적으로 만들어진 언어이기 때문에 여러개의 return 값은 갖는 것이 중요한 것인가요??? 질문 2. static void Divide2(int a, int b, ref int result1, ref int result2) { result1 = a / b; result2 = a % b; } int result1 = 0; int result2 = 0; _6_ref와out.Divide2(10, 3, ref result1, ref result2); Console.WriteLine(result1); Console.WriteLine(result2); 위와 같이 ref을 이용해서도 마치 return이 여러개인 것처럼 작동할 수 있는데 out이란 키워드를 따로 만든 이유가 있나요? 물론 out을 사용할 때는 result1과 result2의 초기화가 필요없었지만 ref를 사용하면 초기화가 필수적이었습니다. 이런 차이 때문인건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
Action 관련하여..
안녕하세요!! 바쁘신 와중에 빠른 답변 항상 감사드립니다. 사실 Part3. 강의의 InputManager에 대한 이해도를 높히고자 다시 이 부분으로 돌아왔는데요! 이 강의에서는 Action은 단지 인자와 반환형식이 모두 없는 Delegate라고 설명해 주시는데 실제 InputManager에서 Action을 사용하실때는 public Delegate void Action();은 이미 System상 선언되어있으니 생략하더라도 public Event Action KeyAction = null; 라는 Event 선언 없이 바로 Action OnMouseClicked = null; 로 Event를 만든 후 여기에 구독 신청을 하더라구요!! 이건 어떻게 가능한 건가요??? System상 이미 public Event Action까지 선언되어 있는 건가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
17분14초 쯤 질문 입니다
안녕하세요 강사님. 프로그래밍 쌩 초보자인데 수업 잘 듣고 있습니다. 다름 아니라 강의 마지막 즈음에 While 문 안에 choice = ChooseClass(); 에서 ClassType choice = ChooseClass(); 로 수정 하셨는데, 디버깅으로 확인해보니 choice가 None으로 자동 설정되는 것 같더라고요. 그래서 choice를 따로 ClassType.None 선언 없이 바로 None으로 설정되는가 해서 ChooseClass 내에 choice도 그냥 ClassType choice; 로 선언하려고 했는데 이건 안되네요. (아래 스크린샷 첨부했습니다) While 문 안에서 바로 ClassType choice를 써도 None으로 기본값이 설정되는데, ChooseClass에서는 None으로 선언해야되는 이유가 있나요? 감사합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
do-while 문에서 while() 조건에 복수 조건을 설정하려면 어떻게 해야하나요?
예를 들어 게임 내에서나 텍스트로 정답을 입력하였을 때, Y 대신 y나 yes, YES 등의 답변을 하는 유저가 있다고 가정할 경우 do-while문에서 복수 조건 설정이 가능한지 궁금합니다! do { Console.WriteLine("저는 귀여운가요? (Y/N)"); answer = Console.ReadLine(); } while (answer != "Y"); Console.WriteLine("정답입니다!");
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
for문과 foreach문 연산속도 차이
강사님 제가 예전에 다른 강의를 들었을 때, 배열에서 for문과 foreach문 중 어떤 걸 사용해야 좋을까 라는 내용을 얼핏 들은 적이 있습니다. 다른 강사님의 답변은 foreach문의 경우 연산속도가 for문보다 현저히 느려서 되도록이면 for문을 사용하라고 하더군요.. 본 강의에서는 말씀주실 때 for문이나 foreach문 둘 다 사용 하신다고 했는데 실제로도 foreach문 연산속도고 느리다고 치면 게임 규모가 클 수록 for문을 대부분 사용하는지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
비트 연산의 용도 부분에서 질문이 있습니다.
<< , >> 를 이용해서 비트 값(?)을 좌우로 옮길 수가 있고, 그렇게 하나의 id 안에 여러 개의 정보를 넣을 수 있다고 하셨는데요. int 자료형을 비트로 환산할 때 32개의 비트로 구성된다고 하면, 2개의 정보를 넣는다고 할 때, 각 정보는 16비트로 구성되니까 최대 65,535개 이상의 범위가 될 수 없는 거라고 이해를 했습니다. 만약 4개의 서로 다른 정보를 넣는다고 하면 각 정보는 최대 256개의 가짓수를 넘을 수 없다고 이해하는 것이 맞을까요? 그리고 그렇다고 한다면 추후 비트연산을 사용할 때, 개별적인 정보 안에서의 다양성을 위해 비트를 넉넉하게 분배해야 하는 것으로 이해하면 맞을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
chat님 질문의 이은 out 추가 질문
chat님께서 남겨주신 질문의 대한 답변으로 말씀주신 링크로 들어가 자세히 보았습니다. 답변 중 아래에 내용에서 [추가로 ref를 사용할 때는 [함수 내부]에서 [함수 외부]로부터 전달받은 값을 읽거나 덮어쓰는 행동이 다 가능하지만,} 위 내용은 이해가 갑니다. 다만 그 후 내용(아래 볼드체)에서 out은 함수 외부에서 무슨 값을 넘겨줬는지 읽는 용도로는 사용이 안된다고 하셨는데, ------------------------------ out을 사용할 때는 <결과물을 넘겨주는 용도>로 사용하기 때문에[함수 외부]에서 무슨 값을 넘겨줬는지 읽는 용도로는 사용이 안됩니다. 아래의 코드에서는 a, b result1, result2의 값을 모두 읽을 수 있지 않나요?? static void Add(int sum1, int sum2, out int result1, out int result2) { result1 = sum1 + sum2; result2 = sum1 - sum2; } static void Main(string[] args) { int a = 1; int b = 2; int result1; int result2; Add(a, b, out result1, out result2); Console.WriteLine(result1); Console.WriteLine(result2); } 정확히 어떤 부분에서 읽은 용도로 사용이 안되는지도 궁금하고 더불어 Add함수의 경우 반환형식을 int로 하여 out을 사용하지 않는 것과 반환형식을 void로 사용 후 out 을 통해 사용하는게 어느 부분에서 다르게 사용해야 하는 이유인지도 궁금합니다. 제 예상은 결과값을 두개 이상 넘겨줘야할 경우에 out을 사용하는 것 같지만 out을 사용하지 않고도 결과값을 두개 이상 넘겨줄수는 없는건가요?? 갑작스레 배운 내용을 토대로 따져보니 궁금증이 생겨 질문드립니다 !
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
string 타입 데이터 크기
강좌에서 char 타입은 오직 하나의 문자만 들어갈 수 있기에 2바이트라고 설명 주신 거는 이해가 됩니다. 여기서 하나 궁금한게 그럼 string 타입은 문자를 무한대로 집어넣을 수 있는건가요?? 만야 그렇게 된다면 string 타입의 크기가 8바이트인지도 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
강의 후반부 내용
강의 후반부에 delegate를 더욱 더 일반화 해주시는 과정에서 delegate Return MyFunc<T, Return>(T, item); 이라고 하셧는데 제가 못 찾는건지 C# document에서 안보이더라고요 이게 그냥 해당함수는 무언가를 반환 하긴 하지만 그 종류가 규정되어있지 않다는 뜻의 키워드인가요? <> 이 표시는 generic이랑, dictionary 쓸 때 본건데 여기선, 첫번째 값이 인자의 종류, 두번째 값이 반환값의 종류를 뜻하던데 <>이 괄호의 용법을 알 수 있을까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
09:58 복붙 어떻게 하신건지 궁금합니다!!
09:58 부분에 복사하고 바로 붙여넣기 하시는데 엄청 빠르게 하시네요. 초보인 저는 한 문장을 마우스로 드래그 해서 복사한후 붙여넣기 하는데 선생님은 말씀으로 "복붙"하시면서 바로 "복붙"하시길래 단축키나 다른 방법이 있는지 궁금해서 질문남깁니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
Delegate가 헷갈려요
안녕하세요 3번째 파트, 유니티 듣다가 C# 문법들이 헷갈려서 유니티 파트 들으면서 C#도 복습중에 있습니다 그러다 Delegate를 다시 듣는데 좀 헷갈려서요 헷갈리는 이유는 아무래도 접한 순서 때문이거 같아요 저는 event를 먼저 배워버려서 이쪽이 가지는 인상이 너무 큰거 같아요 저에게 이벤트는 변수 선언할 때, Event 붙이고, 다른 클래스에서 해당 event에 접속한다음에 += 붙여서 필요한 함수(함수 A)를 구독시킨다ㅣ 여기서 추가로, Event를 통해서 함수A에가다가 추가 정보를 전달해주고 싶으면 EventArgs를 생성해서 넘겨준다 대신, 구독하는 함수A 또한 EventArgs의 형식을 인자로 가져야 한다인데요 (설명이 부정확한 점은 양해 부탁드립니다) 글을 쓰다보니까 이해를 하는 단계인거 같은데 느낌상, Delegate를 사용하면 2가지의 단계가 있는거 같아요예를 들자면 void OnButtonPressed(CalScore calScore) { calScore(); }// 버튼이 눌리면 호출 되는 함수 int _score = 0; delegate int CalScore(int score) CalScore calScore = new Calscore(AddScore(3)); calScore += RemoveScore(2); public int AddScore(int score) { _score += score; } public int RemoveScore(int score) { _score -= score; } static void Main(sting[] args) { OnButtonPressed(calScore) } 이 경우엔, delegate의 인스턴스인 calScore는 이 delegate 형식을 따르는 함수들의 연산 결과물을 담아두고 있는 바구니 같아요. (단계1) 그리고 이 친구를 인자로 받겠다고 한 OnButtonPressed()는 말 그대로 이 delegate 인스턴스를 받아서 이 녀석이 가지고 있는 연산 결과물을 꺼내주는거죠(단계2) 또 다시 글을 쓰다보니까 생각이 드는게 처음에 함수를 인자로 넘겨준다고 하셔서 저는 그 말대로 OnButtonPressed(AddScore(3))가 될 거라고 생각을 했습니다 그런데 곰곰히 생각을 해보니까 그게 아니라 delegate라는 녀석이 두 종류의 함수 사이에서 교두보 역할을 해주는거 같아요 글이 너무 두서가 없어서 죄송합니다 제가 똑바로 이해한게 맞나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
스프라이트 안보임.. ㅠㅠ
안녕하세요 ㅠㅠ 제가 이걸보고 간단한 2d게임 도전하고 있었는데 .. UI -> Sprite 를 추가하여 Game 창을 딱 봤더니 ! 안보입니다 ㅎ z축도 바꿔보고 Order Layer 도 바꿔보고.. 해봤는데 Image일때만 보이고 Image를 끄고 하면 Sprite Renderer 에서 에니메이션이 움직이는데 보이지가 않습니다 ㅠㅠ 제발 부탁드립니다 해결책 없을까요..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
Player player = null;
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 강의 중간에 놓친 부분에 대한 질문일 수 있는데.. 1. Player player = new Player; 새로운 힙 공간에 class 뭉텅이를 새롭게 생성.. Player player = null; 뭉텅이를 생성하되 값이 null로 정해지는것인가요..? 2. Player player; 이렇게 하면 되긴하는데 지역변수가 사용되진 않았다고 나오는데.. 이렇게 하고 마지막에 break point를 잡아서 내용을 보니 null 이라고 나오네요.. 차이가 있을까요..?