월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의자료를 아무리 찾아봐도 어디서 구하는지 못 찾겠습니다. 혹시 어디서 다운받을 수 있나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아무리 찾아봐도 강의자료를 못 구하겠습니다 도움 부탁드립니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
SetCanvas의 gameObject 질문 있습니다
위 사진이 [UI_Button] 클래스에서 base.Init()을 실행 base.Init()은 아래 사진 [UI_Popup]클래스의 Init() {SetCanvas(gameObject)} 인데 base.Init()을 실행했을때 SetCanvas의 gameObject가 UI_Popup이 아니라 UI_Button이던데 그 이유를 알 수 있을까요? base.Init()은 UI_Popup에서 실행됐고 UI_Popup의 gameObject는 자기 자신 아닌가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 22:00분 쉬프트 연산자 질문
(저는 일단 쉬프트연산자가 a << b라고하면 a를 b만큼 왼쪽으로 옮긴다 정도만 알고있습니다) int _mask = (1 << (int)Define.Layer.Ground | (1 << (int)Define.Layer.Monster); 부분에서 Define에 있는 Ground는 현재 값을 9, Monster = 8로 해두었는데 1. 왜 _mask의 값을 쉬프트 연산자로 1을 왼쪽으로 9만큼(Define.Layer.Ground)옮기고 Monster일때는 1을 왼쪽으로 8만큼 옮기게 해서 _mask에 값을 할당을 하나요? 2. _mask에 왜 하드코딩으로 값을 넣어주지 않고 쉬프트 연산자를 사용해서 정수값을 넣어주나요?? 3. 1 << (int)Define.Layer.Ground하게 되었을때 1을 왼쪽으로 9칸 보내면 0001 0000 0000 으로(2진수) 256이 되서? AddLayer의 9번과 안 맞는것 아닌가요...??? 4. 쉬프트연산을 사용하는것이 빠르다면 왜 빠른것인가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
wait_run_ratio값이 0이하로 떨어져요
Animator anim = GetComponent<Animator>(); if (_movetodes) { wait_run_ratio = Mathf.Lerp(wait_run_ratio, 1, 7.0f * Time.deltaTime); anim.SetFloat("wait_run_ratio", wait_run_ratio); anim.Play("WAIT_RUN"); } else { wait_run_ratio = Mathf.Lerp(wait_run_ratio, 0, 7.0f * Time.deltaTime); anim.SetFloat("wait_run_ratio", wait_run_ratio); anim.Play("WAIT_RUN"); } Lerp를 써서 달릴때는 1로 가까워지는데 멈춰있을때는 0을 넘어서 음수가 되버리네요 ㅠㅠ 모션블렌드는 성공했는데 뭐때문에 이게 음수가 되버리는지 모르겠습니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Load, Instantiate, Destroy 메서드를 래핑시킨 이유가 궁금합니다
일부러 Resource Manager를 만들어서 Load, Instantiate, Destroy 메서드를 래핑시킨 이유가 궁금합니다 Input Manager를 만들때에는 특별히 래핑 작업을 하지 않았는데 이번에 래핑을 한 이유가 뭔가요? 디버깅할때 브레이크 포인트를 잡기 쉽다는 것밖에 떠오르지가 않습니다만, 혹시 다른 이유가 있는걸까요? 또한 계속해서 이번처럼 유니티의 메서드에 대해서 래핑을 해야하나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
이런 걸 만드는 사고능력?
안녕하세요 루키스님! 항상 강의 잘 듣고 있습니다! 인벤토리도 벌써 몇번이나 돌려보고 있는데요. 좀 근본적인 궁금증이 있어서 질문을 드립니다.. 나름 공부는 열심히 하는거 같은데.. 만약 '인벤토리 시스템을 만들어 봐라!' 라는 문제가 나와서 만들라고 하면 어떻게 해야할지 생각도 안되고 감도 잡히지 않더라구요. 인벤토리 말고도 뭐 데이터 테이블을 만들어라..세이브로드 시스템을 만들어라 , 이런 것들.. 사고력이라고 해야할까요? 이런게 스스로가 느끼기에 많이 부족한 느낌입니다.. 물론 근본적으로는 공부가 부족해서 그런거같지만... 어떻게해야 이런 사고력이 늘거나 할까요? 그저 막무가내식으로 게임을 많이 만들어봐야할지.. 아니면 알고리즘을 많이 공부해야하는지.. 아니면 기초를 잡고 심도있게 파고들어야 하는지.. 아니면 자료구조를 파야하는지.. 지금 같은 상황에선 뭔가 남의 코드를 복붙 하는 느낌이고 이걸 응용해서 제걸로 만들지 못 하는 느낌입니다.. 강의와는 조금 먼 질문이라서 죄송합니다 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
json 딕셔너리 관련
Json을 딕셔너리로 담는걸 제가 응용해서 한번 쓰려고 이것저것 해보는중인데요! 항상 다른 스크립트에서 예를 들어 data 라는 싱글톤이 있고, 그 안에서 json을 불러와서 딕셔너리로 바꿔준 후 이걸 다른 스크립트에서 사용하기 위해 data.mondict[101].hp 이런식으로 불러오려고 하면 키를 찾을수없다고합니다... 키 , out value 를 써봐도 널값만 뜹니다... 웃긴게 파싱? 한 스크립트 내에서는 잘 써진다는건데... 제가 놓치고 있는 게 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
데이터구조 기초
이게 결국 DATAMANAGER가 JSON이나 XML을 만들어낸다는 구조이겠지요? 넘 초보질문이라서 죄송하네요.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
애니메이터 컨트롤러
유니티의 모든 기능은 코드화가 가능하다라는 전제를 염두에 두고 공부하고 있습니다. 1.애니메이터 컨트롤러는 어떻게 이해해야 될까요? 게임오브젝트와 같은 클래스인가요, 콤퍼넌스일까요? 2. 여러 STATE를 PLAYERCONTROLLER에 넣는 것을 보았는데 이것들은 각각 CLASS일까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
소리문제
소리가 안들려요 ㅠㅠ 하드웨어 문제일까요? 코드는 맞게 작성 하였는데...
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
_order 값 질문
ShowPopupUI 를 이용하여 5개의 UI_Button 을 만들고, 다시 ClosePopup을 이용하여 3개 UI_Button을 삭제 하였습니다. 그런데 sort order 값을 보니 -2 -1 가 남았어요코드는 강사님 코드와 같습니다.원래대로라면 1, 2 가 남아야 하는거 아닌가여?? _order 은 초기값이 1 입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의와 별개로 질문 드립니다.
롤이나 배그 등등 온라인게임을 다운받을 때, 제가 설정한 경로에 다운로드 설치를 하고 폴더안에서 코드 편집기로 파일을 열면 똑같이 코드가 작성되있는것을 볼 수 잇나요?(열린다는 가정하에)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 11:00까지 이해한부분(조금 길어용)
현재 [Serializable] 필드 두개로 StatData, Stat을 Json파일과 형식을 똑같이 맞춰주는 부분이고 StatData는 ILoader<int, Stat>을 상속받는 아이여야 한다. 라는 부분이다. 현재 ILoader인터페이스를 상속받고있으니 Dictionary<Key, Value> MakeDict() 이부분을 반드시 구현해야한다. 그래서 StatData에서 public List<Stat> stats = new List<Stat>();으로 빈 List를 만들고 public Dictionary<int, Stat> MakeDict() 인터페이스를 구현을 하는 부분인데 { // 안에서 Dictionary<int ,Stat> dict = new Dictionary<int, Stat>(); int를 Key, Stat을 Value로 가지는 Dict 만들어주고 foreach를 통해서 dict의 Key값에는 stat.level을 value에는 stat을 dict.Add로 추가를 해주는 것을 구현을 하였다 } 그리고 DataManager class에서는 public Dictionary<int, Stat> StatDict { get; private set; } = new Dictionary<int, Stat>(); int를 Key로 Stat을 Value로 받는 Dict를 StatDict라고 선언을 했다 (근데 왜 얘만 { get; private set; }으로 한것인지?) 그리고 Loader타입을 반환하는 LoadJson함수를 만들었는데 LoadJson함수는 타입을<Loader, Key, Value>를 받고 인자로 string path 경로를 받게하였다. 근데 Loader라는 타입은 ILoader를 무조건 상속받는데 ILoader가 타입이 <Key, Value>인것 아무거나라도 괜찮은 Loader를 받는 다는 의미이다!! 이까지 코드분석은 된거같고 !!문제!!는 init()함수에서 int를 Key, Stat을 Value로 받는 StatDict인데 StatDict는 LoadJson에 타입을<StatData, int , Stat>을 받고 인자로는 "StatData"(경로)를 넣어주었다. 그러면 StatData LoadJson<StatData, int, Stat>("StatData") where StatData : ILoader<int, Stat> 함수를 호출하고 .MakeDict();를 한것이 StatDict에 할당이 된다는 뜻까지는 Okay! 그러면 호출 순서가 TextAsset textAsset = Managers.Resource.Load<TextAsset>("Data/StatData"); 먼저실행 textAsset에 경로를 넣어준 파일 할당 JsonUtility.FromJson<StatData>(textAsset.text);를 통해 StatData타입으로 textAsset.text를 파싱한것을 return 해준다. 그러면 LoadJson<StatData, int, Stat>("StatData")이부분까지는 위의 호출 순서대로 return을 해준것은 StatData 클래스 타입으로 textAsset.text를 파싱한것인데, StatData클래스는 ILodaer<int, Stat>을 상속받았기 때문에 MakeDict()라는 함수를 가지고있어서 StatDict = LoadJson<StatData, int, Stat>("StatData").MakeDict(); 가 가능한것이고 StatData의 MakeDict함수를 써주었기 때문에 결국에는 dict가 반환이 되는데 이것이 dict를 DataManager 39번째 줄에 선언을 해주었던 StatDict 딕셔너리에 할당을 해주는것이 된다. 1. 이렇게 정리하면서 공부했는데 위에 제가 혼자 정리한것이, 제가 이해한것이 맞나요?? 2. 이런식으로 코딩을 정리하는 습관이 유니티,씨샵을 공부하면서 효과적인 정리일까요?? 3. DataManager클래스 안에서 public Dictionary<int, Stat> StatDict { get; private set; } = new Dictionary<int, Stat>(); 이부분만 왜 { get; private set; }으로 만든것인가요? public Dictionary<int, Stat> StatDict = new Dictionary<int, Stat>(); 이렇게 선언한것이랑 차이가 무엇인가요?? 4. 함수나 딕셔너리에서 < > 안에 타입을 넣어주시는데 이것이 int, string 같은 변수의 진짜 타입을 넣어 줄 수도 있는것이고class형식이다라는 것도< > 안에 넣어 주어서 public void init() { StatDict = LoadJson<StatData, int, Stat>("StatData").MakeDict(); } 처럼 LoadJson<StatData, int, Stat>을 넣어 주었기때문에 StatData를 < > 안에 "class형식이다" 라고 넣어줘서 StatData안에 MakeDict함수를 .MakeDict()로 사용이 가능한것인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
스크립트 다운로드 문의
안녕하세요 명강의 정말 잘 듣고 있습니다. 감사합니다 : ) 애니메이션까지 들어가는 중인데 플레이어 컨트롤 하는 스크립트를 잘못 짠것 같아서 이동과 애니메이션 동작에 문제가 생겼습니다. 강사님이 작성하신 스크립트랑 비교해서 찾아 보고 싶은데 스크립트를 다운 받을 수 있는 곳이 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
한번 간단하게 만들어보려는데
드디어 완강을 다했습니다. 그래서 한번 게임을 만들어보려는데 턴제 rpg나 3d액션 게임을 만들어보려는데 진짜 전에 강의에서 얘기했던대로 이게 강의 들으면서 할때는 그렇게 어렵진않았는데 막상 혼자 만들려니까 진짜 막막하더군요 기억이 잘안나는건 다시 들으면서 해야될거같고 혹시 처음에 혼자 게임만들어보려고할때 어떻게 했나요? 팁같은거 있나요? 아트같은건 어떻게 하고
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
디버깅할때 문제
19:00분에서 유니티에 연결하고 breakPoint잡으신부분이 유니티에서 실행하면 비쥬얼스튜디오 딱 열리고 data에 뭐뭐가 들어가있는지 영상처럼 안뜨는데 문제가 무엇일까요?? 저는 breakpoint를 잡고 실행한뒤에 비쥬얼 스튜디오로 돌아오면 뭐 아무것도 안나옵니다... 영상처럼 Unity에 연결하는 부분이 없습니다
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
property와 enum에서 질문이 있습니다.
Q1. Managers 클래스에서 각 Manager들의 싱글톤 객체들을 프로퍼티로 지닐 때에는 각 프로퍼티별로 필드가 프로퍼티의 value를 가지고 있게 했는데, 이번 강의의 BaseScene클래스의 SceneType 프로퍼티의 경우는 그냥 값을 초기화 해서 넣어주었습니다. 혹시 위의 두 경우 어떠한 차이점이 있거나, 다른 의도가 있으셨던 건지 알려주시면 감사하겠습니다. Q2. enum 타입으로 선언하실 때 어떠한 것들은 None(이전의 미로 자료구조 관련 강의 TileType), 이나 Unknown(이번 강좌의 SceneType) 같은 예외적인 상황에 사용될? 혹은 기본값으로 사용될? 값들을 미리 정의해 두셨는데, 다른 enum type을 정의하실 때에는 이러한 부분을 정의해 두지 않으셨습니다. 혹시, 예외적인 상황이나 기본값으로 사용될 것을 미리 예측, 혹은 미리 그러한 구조를 머릿속으로 짜신다음에 정의를 해두신 건가요? 아니면 어떤 다른 의도나 판단 기준이 있으신건가요? 언제나 양질의 강의 감사드립니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Managers 기초적인 부분 질문
Managers파일에서 현재 이런식으로 코드가 짜져 있을 때 외부에서 Data의 함수에 접근을 할 때 Managers.Data.어떠한함수(); 이런식으로 Managers를 통해서만 접근이 가능하게 만들어 놓았는데 저렇게만 접근할 수 있도록 해두었는데... 질문 드리고 싶은게 어떤것이냐면은 1.현재 static Managers s_instance;로 한정자를 두어 오로지 Managers. s_instance 로만 접근이 가능하도록 만들어 두었습니다.(..맞나용..?) 2. 그리고 static Managers Instance { get { init(); return s_instance; } } 이코드의 말뜻이 return 으로 s_instance를 가르키니까 init()함수를 실행하고나서 Instance라는 프로퍼티는 결국 s_instance를 가르키는 말이 되는것인가요?? 3. init함수를 살펴보면 결국에 Managers라는 컴포넌트를 찾아서 go에 할당해주고 go를 s_instance에 할당을 해주는데 코드 시작할때 init()함수를 먼저 실행하니까 s_instance가 결국에는 Managers파일(컴포넌트)를 가르키게 되는것인가요? 4. 1~3 종합을 하면 코드 시작할때 init함수 실행 -> s_instace가 Managers를 가르킴 -> static Managers Instance { get { init(); return s_instance; } }의 말뜻은 결국 s_instance를 가르킴 -> 따라서 public static DataManager Data { get { return Instance._data; } } Data와같은 프로퍼티도 결국 _data(DataManager의 새로운 객체)를 가르킴 -> 그러므로 Managers.Data.(_data안에있는 함수) 이렇게 접근을 하여 사용이 가능한 것인가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
화면이 갑자기 크게 나옵니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 이번에 강의를 따라하고 나서 보다시피 화면이 엄청 크게 나옵니다 ui도 평소보다 더 크게 나오고 혹여나 뭘 잘못건들였나해서 완성판 코드를 다운받아서 복붙했는데도 이러는데 뭐가 문제인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
6:50 설명부분 질문(시간 연산 질문)
강의를 듣다가 궁금한 부분이 생겨서 질문합니다! float deltaTime = 0; void ExplodeAfter4Secod() { deltaTime += Time.deltaTime; if(deltaTime >= 4) { // 로직 } 이렇게 코드를 작성하여 실행을 시키면 컴퓨터가 매프레임마다 deltaTime에 Time.deltaTime을 더해서 if문으로 확인을하고 다시 시간을 더해서 if문으로 확인을하고 이러한 일련의 작업들이 무식하고 비효율적이다 => 그래서 시간 매니저를 만들어서 시간매니저에게 "4초후에 무엇인가를 하고싶어!"라고 던져주면 시간매니저가 4초가되었을때 알려주어 해당 로직을 실행하게하면, 매프레임마다 매프레임마다 시간을 더해서 if문 체크를 하는 낭비를 생략할 수 있다. 즉, 중앙에서 관리를 하면 낭비를 줄일 수 있다라고 설명을 하셨는데 1. "4초후에 무엇인가를 하고싶어!"라고 시간매니저(중앙)에 던져주어 매니저가 시간을 샌다음에 결국에 다시 해당 함수에 "4초가 지났다!"라고 알려주어 해당함수의 로직이 실행이되는것같은데.. 매니저에게 "4초후에 무엇인가를 하고싶어!" 라고 던져주면 결국 매니저도 연산을 한뒤에 요청을 보낸 함수에게 알려주는 것이니까 결국 같은것아닌가용...??ㅎㅎ;;(원리가 잘 이해가 가지 않습니다) 2. 시간 매니저에게 "4초후에 무엇인가를 하고싶어!"라고 보냈을때는 매틱마다(매 프레임마다)연산을 하지않고 4초가지났다라고 해당함수에게 알려 줄 수 있는것인가요?? 3. 시간매니저에게 "4초후에 무엇인가를 하고싶어!"라는 요청을 보낼때 매프레임마다 연산을 하지않는다면 시간을 어떻게 재서 다시 해당함수에게 알려 줄 수 있는것인가요?? 4. 코루틴이 1~3경우에 굉장히 유용하다고 설명하셨는데 코루틴은 어떠한 원리로 "4초를 일시정지"햇다가 다시 실행시켜 줄 수 있는것인가요? 일시정지를 했더라도 일시정지한 시간을 알아야 4초후에 알려줄 수 있는거같은데...일시정지하는동안도 연산을 하나요??