묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
소수를 포함한 크기가 다른데 변환할때요
게임 제작에 있어 저렇게 프로그래밍 할 이유가 있나요? 그니까 애초에 저렇게 변환을 할 이유가 뭐가 있나요?정확하지 않고 오버되는 값은 다 분실되는데 저렇게 하면 망하지 않나요..?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
Render() 부분에 질문있습니다.
이중for문안의Console.ForegroundColor = GetTileColor(_tile[y, x]);Console.Write(CIRCLE);의 순서를 바꾸어서 해봤는데 똑같이 나올거라 예상했지만 아니었습니다.Circle을 먼저 위에 적고 하면 Circle을 먼저 그리고 그 위에 색을 입힌다 라고 생각했었지만, 그러면 GetTileColor에서 어떤부분이 아직 wall인지 empty인지 컴퓨터가 몰라서 같은 결과가 안나오는게 맞는지 궁금합니다!++해당 공간에 어떤색인지 미리 지정한다음 도형을 넣어 지정된 색으로 출력하는 방식이 맞는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
포톤 공부에 대해서 질문드립니다
안녕하세요 루키스 선생님 선생님 강의를 들을 때마다 느끼지만, 여러 번 듣고, 미리 기본을 다지고 오면 얻어가는 것이 많다고 느꼈습니다.지금 서버를 공부하고 있는데, 꽤 난이도가 있고 너무 막연한 느낌이 들었습니다. 내가 실제 게임에 연동할 수 있을까? 실제로 사용가능한가? 등등.. (아직 연동까지는 듣지 못했고, 서버 파트만 들었습니다.) 그러다 포톤이라는 서버프로그램을 알게 되어서 포톤을 공부해고 인강을 들을까 생각이 드는데 선생님 생각은 어떠신지 궁금합니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
TextRPG2 강의 질문입니다
비전공자가 공부중인데 너무 기초적인 질문인것같지만혼자하다보니 헷갈려 질문남깁니다.static 함수가 아닌경우 함수 호출을하려면 객체를 생성후 호출을 해야한다고 알고있습니다 .메인함수에서 Game game = new Game();으로 game 객체 생성 후 game.Process(); 함수를 호출하는것은 이해가 가는데 Game 클래스 내에서 ProcessField()등 다른 함수들을 호출하는 동안은 game.을 작성하지 않고 호출하는데 같은 클래스에서 함수호출은 game.과 같이 객체 이름을 따로 작성하지 않아도 되는건가요?그냥 되나보다 생각하려다 확실히 알고싶어 질문남깁니다.며칠째 강의보고 RPG 혼자 만들보려는데 정말 어렵네요..
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
TextRPG EnterField 부분
using System; //ref : 기존 변수를 메서드에서 수정할 때 사용 //out : 메서드 내에서 생성된 값을 반환할 때 사용 namespace TextRPG_1 { class Program { enum ClassType { None = 0, Knight = 1, Archer = 2, Mage = 3 } struct Player { public int hp; public int attack; } static ClassType ChooseClass() { Console.WriteLine("직업을 선택하세요"); Console.WriteLine("[1] 기사"); Console.WriteLine("[2] 궁수"); Console.WriteLine("[3] 법사"); ClassType choice = ClassType.None; string input = Console.ReadLine(); 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; } } enum MonsterType { None = 0, Slime = 1, Orc = 2, Skeleton = 3 } struct Monster { public int hp; public int attack; } static void CreateRandomMonster(out Monster monster) { Random rand = new Random(); int type = rand.Next(1, 4); switch (type) { 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 EnterGame(ref Player player) { while (true) { Console.WriteLine("마을에 접속했습니다"); Console.WriteLine("[1] 필드로 간다"); Console.WriteLine("[2] 로비로 돌아가기"); string input = Console.ReadLine(); switch (input) { case "1": EnterField(ref player); break; case "2": return; } } } 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 per = rand.Next(0, 101); if (per > 33) { Console.WriteLine("도망에 실패했습니다. 전투 모드로 돌입합니다."); Fight(ref player, ref monster); } else { Console.WriteLine("도망치는 데 성공했습니다"); EnterGame(ref player); } } } } static void Fight(ref Player player, ref Monster monster) { while (true) { monster.hp -= player.attack; if (monster.hp <= 0) { Console.WriteLine("승리했습니다!"); Console.WriteLine($"hp:{player.hp}"); break; } player.hp -= monster.attack; if (player.hp <= 0) { Console.WriteLine("패배했습니다!"); break; } } } static void Main(string[] args) { while (true) { ClassType choice = ChooseClass(); if(choice != ClassType.None) { Player player; CreatePlayer(choice, out player); EnterGame(ref player); } } } } }해당 코드를 실행했을 때 처음 직업 선택 후 마을 접속 -> 로비로 돌아가기를 누르면 정상적으로 직업 선택 창으로 이동할 수 있는데,한번 필드에 접속하면 [2] 일정확률로 마을로 돌아가기 <를 성공해서 EnterGame()에 다시 접속하는 경우에는 로비를 돌아가기를 눌러도 계속해서 몬스터가 생성이 됩니다. 코드에서 어떤 부분을 고쳐야 해결할 수 있을까요? ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
유니티 scene view 격자
어느 순간 부터 scene 에서 격자무늬가 안보이기 시작했습니다 ㅠㅠ그나마 마우스 휠로 겁나 축소를 해야 이렇게 격자가 보이는 수준인데 해결 방법을 도무지 찾을 수가 없네요ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
10진수에서 15는 어떻게 표기하나요?
그냥 11 12 13 14 15 이렇겐가요? 만약 세자리가 나와도 그냥 100 101... 158 이런식인가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
OnMouseClicked 관련 질문
안녕하세요,강의 수강 후 혼자 복습하면서 리뷰 하던 중에 궁금한 점이 있어서 문의 드립니다.InputManager에서 KeyAction 과 다르게 Mounse Action은 public Action의 Generic 타입이 사용된 이유가 궁금합니다.unity의 Input에 press와 click이 구분되어있지 않기 때문에, enum을 통해서 구분할 수 있도록 생성해 준게 맞을까요?그래서 이후에 PlayerController 에서도 함수의 입력에 마우스 상태를 구분지어서 input으로 넣어주게 되고, 반대로 KeyAction은 Input에 GetKey라는 함수가 있어서 iput 없이 delegate를 이용할 수 있다.. 라고 생각하는데, 뭔가 명확하게 이해가 되지는 않고 흐릿해서 질문 드립니다. 감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
Stack&Heap 질문입니다!
스택과 힙 관련해서 궁금해서 질문입니다Windows 레지스트리와 같은 것도 힙 영역에 해당되는 것일까요?
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
reference count 관련 질문
안녕하세요 좋은 강의 제공해주셔서 감사합니다.reference count 관련해서 궁금한 점이 있습니다.강의를 듣고 에셋로드시에 reference count가 1증가인스턴스 생성시 1증가 라고 이해를 했지만 실제로 디버깅해봤을 때에는에셋로드랑 인스턴스 생성 두 경우 모두 레퍼런스 카운트가 2로 표시되었습니다.혹시 저 값으로 확인을 하는 게 맞는지 혹은 제가 코드를 잘못 작성했는지.... 설정을 잘못했는지...제가 이해를 잘못한 것은 아닌지 알고 싶습니다. -에셋 로드시 - 인스턴스 생성시
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
공부 방법에 대해서 질문이 있습니다
안녕하십니까 게임 프로그래머 취업 가이드 영상을 보고 클라이언트쪽만 공부하다가 서버 공부를 시작하려고 하는 대학교 2학년생입니다.유니티와 언리얼강의 전체를 한번씩 보면서 어떤 느낌인지 파악하고 이해 안되는 강의를 계속 돌려보는 식으로 공부하려고 했습니다. 근데 제가 유니티 c#, 알고리즘, 엔진을 들을때는 괜찮았는데 게임서버 강의를 이제 1번 완강했는데 거의 부분적인 이해만 한것같고 전체의5%정도밖에 이해를 못했습니다.. 이게 다음파트로 넘어가는게 맞을까요? 아니면 이해갈때까지 서버강의를 계속 들어야할까요?조금이라도 이해가 더 될까봐 한빛아카데미 데이터 통신과 컴퓨터 네트워크 박기현 지음 이 이론책을 같이 보면서 공부중인데 이 두꺼운 이론책을 봐도 이 강의와의 접점을 못찾겠고 봐도 이해가 잘 안가는데 보는게 맞을까요? 아니면 시간낭비일까요..?강의 듣는 순서도 고민이 됩니다 유니티 강의보다 c++ 강의와 c++ 서버 강의를 듣고 유니티 강의로 넘어오는게 나을까요 아니면 지금 하는대로 유니티먼저듣고 c++강의로 넘어가는게 맞을까요?중구난방하게 글을 적은 느낌이라 죄송합니다 ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
현재 방식에서 Addressable로 변경시 로드
안녕하세요. 항상 좋은 강의 감사합니다. 다름이 아니라 현재 resources에서 경로를 통한 로드로 코드를 사용하시는데 만약 에셋번들이나 어드레서블로 변경시 해당 방식을 전부 교채해야 되는건가요..?
-
미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
강의도중 질문이 있습니다
선생님께서는 struct구조로 생성자를 많이 쓰시던데,class로 생성자를 만드는것과struct로 생성자를 만드는 것이어떤 차이가 있는지 궁금합니다.성능상에 차이만 있는건지제가 알기로는 class로 생성자를 만들면 초기값을 넣을 수 있다고 알고 있습니다.차이는 그정도일까요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
2022 버전을 다운받았는데
새 프로젝트 만들기 누르니영상처럼 유징 시스템네임 스페이스 csharp클래스 프로그램이런게 전혀 없고그냥 콘솔 writeline 헬로우월드 한줄만 있네요 디버깅은 되면 문제가 없는걸까요..
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
강의에 나와있는 2019 버전 16.4.2버전이 존재하지 않아요
그나마 비슷한 16.1.1 버전? 을 다운받았으나시작할때 .net core 가 없고 프레임워크만 있습니다.그래서 그냥 어차피 인터페이스 달라지는거 2022 최신버전 설치 하였는데 그대로 진행해도 괜찮을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
new List 동기화 와 관련하여..
public List<IPacket> PopAll(){ List<IPacket> list = new List<IPacket>(); lock(_lock) { ...어떤 처리.. }} 이 함수가 멀티 스레드로 실행 된다고 했을대 list 이 변수는 안에가 list 형태인데 linkedlist 같은것도 스레드 세이프 한건가요?여러개의 스레드가 linkedlist 를 생성만 한다고 했을때(위의 예시처럼 원소 추가나 조작 없이) 동시에 new 연산이 내부에서 실행 된다 여러개 스레드에서 동시에 힙에 new 연산이 실행될것 같은데(예를 들어 c++ vector<> 같은..) 멀티스레드로 new 연산시 같은 주소에 생성될 일이 발생할 수도 있지 않을까 해서요 질문을 요약하자면-지역변수에서 힙쪽의 new 를 생성하는게 있다면 그것은 스레드 세이프한가? 라는것이 질문입니다답변 부탁드려요!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문1. base.Init() 컴파일 에러가 발생합니다
메시지: CS0205 추상 기본 멤버를 호출할 수 없습니다https://learn.microsoft.com/ko-kr/dotnet/csharp/misc/cs0205원인 추정: 2023. 01. 05 이후 abstract 메서드 본문을 호출하는 시도를 문법적으로 중단(abstract 는 메서드 껍데기만 동일하게 가져가는 것을 의도로 할 때만 사용 가능하게끔 하고, base 를 호출하며 사용할 때는 virtual 를 쓰도록 강제로 권장 안 좋은 대안: Start() 실행 순서 관리를 설정에서 직접 관리. '편집 -> 프로젝트 설정 -> 스크립트 실행 순서로 이동하여 스크립트의 실행 순서를 설정'대체 시도: UI_Base 의 Init() 를 abstract 대신 virtual 로 변경 질문 요지: virtual 로 변경해도 문제가 없을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 노가다작업..
패킷 작업이 노가다 같은데 좀 더 편한 방법 이있나요?protobuf 는 사용법만 좀 보긴 했는데 좀 더 편한가요?
-
미해결C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
collision 발생 조건
안녕하세요! 강의 잘 보고 있습니다다름이 아니라 2.18 적군 구현하기 3 - 플레이어 피격 실습하면서 Enemy gameObject와 Player gameObject를 충돌시키려고 할 때, 두 gameObject 모두 Kinematic일 경우 충돌 이벤트 자체가 발생하지 않더라구요 Rigidbody의 Body Type별로 충돌 이벤트가 다른식으로 발생하는거 같은데, Rigbody의 body type이 왜 둘다 Kinematic이면 충돌이벤트가 발생하지 않는지Collider와 Rigidbody는 어떤식으로 상호작용하는지답변이 가능할까요? 강의에서 다루는 내용에서 크게 벗어난다면 키워드만 알려주시면 검색해서 공부해보겠습니다..! 새해 복 많이 받으시고, 즐거운 한 해 되세요!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
싱글 코어와 멀티 코어에 대해 질문드립니다.
안녕하세요. 싱글 코어와 멀티 코어에 대해 궁금한 점에 대해 질문드립니다.1.만약 제가 작성한 프로그램에서 멀티 쓰레드를 사용하더라도 사용하는 컴퓨터의 CPU가 싱글 코어 일 경우쓰레드를 사용할 때 컨텍스트 스위칭이 일어나기 떄문에 멀티 쓰레드를 사용하는 건 의미가 없는 게 맞을까요?2.반대로 멀티 코어인 컴퓨터에 단일 스레드 환경의 프로그램을 만들었을 경우 여러 코어를 사용하는 게 아닌 하나의 코어만 사용하게 되어 CPU의 성능을 제대로 활용 못하는 게 맞을까요? 실제 운영체제 환경에서는 제가 만든 프로그램 외 에도 백그라운드로 실행되는 프로그램들이 있어서 코어 하나만 사용하진 않겠지만 개념적으로 봤을 때 멀티 코어일 때 단일 쓰레드 환경의 프로그램이면 CPU 성능을 제대로 활용 못 하는 게 맞는 건지 궁금합니다.