월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Util.cs의 FindChild의 recursive == true인 부분이 이해가 가질 않습니다.
안녕하세요 수업을 듣다가 16분쯤에 질문이 생겨 남깁니다.재귀라 하면 자식의 자식, 자식의 자식의 자식까지 쭉 돌면서 계속 찾아야하는 거라고 생각했는데 현재 코드대로라면 자식의 자식까지만 탐색하고 종료한다고 생각합니다.else - foreach에서 FindChild<T>(component, name, true)로 함수를 다시 호출해야하는 건 아닌지 궁금합니다.감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Start() 순서 관련하여 문제가 발견된듯 합니다
강의에서 stat 클레스 생성후 start Start()문이 PlayerController Start() 보다 느리게 만들어져 speed값이 0이 되는 문제가 발견 됬습니다 이럴때는 어떻게 하면 좋을까요
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
manager들 사이의 호출순서가 궁금해요
manager public class Managers : MonoBehaviour{static Managers s_Instance; //유일성이 보장된다public static Managers instance { get { Init(); return s_Instance; } } // 유일한 매니저를 갖고온다InputManager _input = new InputManager();public static InputManager input { get { return instance._input; } }// Start is called before the first frame updatevoid Start(){Init();}// Update is called once per framevoid Update(){_input.OnUpdate();}static void Init(){if (s_Instance == null){GameObject go = GameObject.Find("@Managers");if (go == null){go = new GameObject { name = "@Managers" };go.AddComponent<Managers>();}DontDestroyOnLoad(go);s_Instance = go.GetComponent<Managers>();}}}==================================playercontroller.cs public class PlayerController : MonoBehaviour{[SerializeField]float _speed = 10.0f;// Start is called before the first frame updatevoid Start(){Managers.input.KeyAction -= OnKeyboard; //실수 방지용으로 미리 한번 -함Managers.input.KeyAction += OnKeyboard;}// Update is called once per framevoid Update(){ } void OnKeyboard(){if (Input.GetKey(KeyCode.W)){transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward), 0.2f);transform.position += Vector3.forward Time.deltaTime _speed;}if (Input.GetKey(KeyCode.S)){transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.back), 0.2f);transform.position += Vector3.back Time.deltaTime _speed;}if (Input.GetKey(KeyCode.A)){transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.left), 0.2f);transform.position += Vector3.left Time.deltaTime _speed;}if (Input.GetKey(KeyCode.D)){transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.right), 0.2f);transform.position += Vector3.right Time.deltaTime _speed;}}}==================================public class InputManager{public Action KeyAction = null; public void OnUpdate(){if (Input.anyKey == false)return;if (KeyAction != null)KeyAction.Invoke();}}==================================player.cs public class Player : MonoBehaviour{ // Start is called before the first frame updatevoid Start(){Managers mg = Managers.instance;}// Update is called once per framevoid Update(){ }} 지금 unitychan 오브잭트에 playercontroller 컴포넌트를 inspector창에다 추가한뒤에 실행을 하는데 input값을 입력받을떄마다 어떤식으로 작동이되는지 순서가 이해가 안가요playercontroller 에 update()에 아무것도 없는데 지속적으로 어떻게 key값을 받는지 궁금해요start()는 1회실행되는 함수인데 player.cs도 지금 존재 이유가 유일한 manager 컴포넌트를 쓰게하기 위해서 만들었는데[ 점점 갈수록 어렵네요
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
LayerMask를 사용하면 왜 최적화가 되는지 잘 이해가 되지 않습니다.
LayerMask를 통해 RayCasting을 하면 하지 않았을 때보다 최적화가 된다고 하셨는데 왜 그런지 잘 이해가 되지 않습니다. 혹시 더 자세하게 알려주실 수 있나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
게임을 만들기 전에 서버공부부터 해야할까요?
안녕하세요! 캐쥬얼 싱글 게임을 만드려고 하는 뉴비입니다. 강의수강중에 서버에 관련한 질문을 보다가 저도 비슷한 궁금증이 있어서 댓글 남깁니다. 싱글 게임에는 굳이 서버가 필요 없다고 하셨는데요 그래도 플레이팹이나 파이어베이스같은 서버를 붙히고 싶습니다!1. 유저 데이터를 서버에서 받아서 여러 기기에서 플레이해도 설정값 등등을 불러올수 있도록2. 주기적으로 클라이언트의 데이터 값과 서버의 데이터값을 비교해서 동기화3. 인게임 재화를 이용한 상자에서 나오는 아이템들을 처리하는 함수등등 중요한 데이터를 서버에서 호출4. 우편함 시스템 등등위와 같은 기능들을 서버로 구현해서 보안도 향상시키고 일부 편의 기능들도 추가하고싶어요. 그런데 제가 서버에 대한 지식이 전무하다는게 문제입니다 : (그래서 지금 당장 서버공부 부터 시작을 해야할까요? 게임을 만들다가 추후에 서버를 붙히려고 하면 기존의 코드를 전부 수정해야한다던지 하는 일이 일어나지는 않을까요..? (이부분이 제일 궁금합니다) 배움의 순서가 어느것이 맞는 것인지 게임을 만들면서 추후에 서버를 고려해도 괜찮은지 루키스님의 의견 부탁드립니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
제네릭 타입 질문
학습중에 클래스를 제네릭으로 받으면 어떻게 될까 궁금해 한번 받아봤습니다!우선 필요한 정보를 받아올때 json 파일마다 역직렬화 & 직렬화 용도의 클래스가 다르기 때문에해당 부분을 public IEnumerator CoDownLoadJsonData<T>(string URL) where T : class { UnityWebRequest request = UnityWebRequest.Get(URL); yield return request.SendWebRequest(); // 에러 발생 시 if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.Log(request.error); } // 에러 없을 시 else { // S3의 JSON 파일 읽어와서 넣어주기 T[] jsonDatas = JsonConvert.DeserializeObject<T[]>(request.downloadHandler.text); // 그 뒤 값 처리 해주는 부분 foreach (T jsonData in jsonDatas) { // TEMP Debug.Log(무슨 값을 넣어야 할까요); } } }이렇게 짜봤습니다. 위의 함수를 실행 할 때 넣은 T 값은 public class JsonData{ public string name; public int coin; public int ruby;}JsonData라는 클래스 입니다.그리고 다운로드 받은 json 데이터의 name 값을 보기위해 '무슨 값을 넣어야 할까요'부분에 jsonData.name을 쳐보았지만 타입이 제네릭이라 받기전까지 name이 있나 없나를 알 수 없기 때문에 당연히 해당 코드는 에러가 났습니다. 이러면 파싱 받을 json 데이터 마다의 클래스를 따로 분기해서 처리해줘야 한다는 말인데 제네릭 타입을 이용하여 루키스님 처럼 우아?하게 코드를 짜보고 싶은 생각이 드네요. 방법을 못 찼겠어서 질문드립니다!!현재 저의 머리로는 제네릭으로 만든후 안에 조건문을 추가해서 as 로 파싱되면 그쪽으로 처리하는 분기문을 만드는게 한계인거 같네요 ㅠㅠ값은 정상적으로 받아와집니다만 브레이크 포인트를 통해서 값을 확인하는 것이 아니면 확인이 안되네요 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
마우스 커서 클릭
혹시 롤 처럼 마우스 클릭시 이동 좌표에 여기로 가라?라는 이미지는 좌표 를 받아와서 애니메이션으로 처리해야하는건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
코드 저작권 관련 질문입니다.
안녕하세요, 루키스님 강의를 들으며 게임 개발자의 꿈을 키우고 있는 학생입니다!다름이 아니라 강의 파트3에서 나온 소스코드를 기반으로 여러 기능적 요소를 추가하고 바꿔서 싱글플레이 RPG게임을 만들어 itch.io에 배포를 하려고 하는데, 유니티 에셋 스토어에서 제공되는 에셋들처럼 개인적, 또는 상업적 용도의 게임에 사용할 수 있는지 궁금하여 질문드립니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Clamp
Mathf.Clamp 스피드 가 목적지 보다 커져서 정확한 목적지 에 도착하려고 왔다갔다 하는거를 Clamp에 속도가 0 에서 목적지 사이에 값을 반환해서 속도를 줄여주는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
싱글톤패턴에서 질문
18:25쯤에 public static Managers instance {get{init(); return s_instance;}}로 함수에서 프로퍼티로 바꿔서 ()없이 가져오기 편하게 바꾸셧는데 이떄 {}안에 init();을 넣은 이유는 안넣으면 return s_instance;할때 오류가나서 그런가요? 이유를 알고싶어요
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
수강생입니다
메일 주소 좀 알 수 있을까요? 길게 말씀드릴께 있어서
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
FBX warning이 궁금합니
위 오류들이 나는 이유가 궁금합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
코드에서 질문이 하나 있습니다
lockTarget의 경우에는 BaseController으로부터 공용으로 PlayerController, MonsterController둘 다에서 사용되는데 locktarget이 각각 따로따로 적용되는 건지 아님 한곳에서 lockTarget이 Knight로 설정되어 있으면 다른 한곳에서도 똑같은 lockTarget이 Knight로 설정되어 있는 건지 궁금합니다.그리고 각각 따로 설정된다면 왜 그런지 알고싶습니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
코드중에 궁굼한사항이 있어 질문남깁니다
BaseControllerprivate void Start() { Init(); } protected virtual void Init() { }PlayerControllerprotected override void Init() { base.Init(); _stat = gameObject.GetComponent<PlayerStat>(); //Managers.Input.KeyAction -= OnKeyboard; //Managers.Input.KeyAction += OnKeyboard; Managers.Input.MouseAction -= OnMouseEvent; Managers.Input.MouseAction += OnMouseEvent; Managers.UI.MakeWorldSpaceUI<UI_HpBar>(transform); //Managers.UI.ClosePopupUI(ui); //Managers.Resource.Instantiate("UI/UI_Button"); }1.BaseController에 start는 스크립트를 추가하지 않았는데 왜 실행되는지2. public과 protected 사용 기준이 두가지가 궁금합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
2:28 Get<Text>가 NullReferenceException 을 뱉어내는 이유
1. 똑같이 했는데 계속 이 NullReferenceException 오류가 뜨네요.뭐가 문제일까요? 프로젝트 압축해서 올릴게요. 2. 디버깅 같은 경우 따로 알려주시는 강의가 있나요?비주얼 스튜디오 디버깅을 어떻게 해야 할지 하나도 감이 오질 않아요. 밑에 뜨는 부분을 어떻게 읽어야 할지도 전혀 모르겠어요. 이 경우 공부 팁이 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
DontDestroyOnLoad() 가 적용이 안됩니다
코드는 제대로 작성했는데 정작 유니티로 돌아가면 적용되지 않는 이유가 무엇일까요.........using System.Collections; using System.Collections.Generic; using UnityEngine; public class Managers : MonoBehaviour { static Managers s_instance; //유일성 보장 public static Managers Instance { get { init(); return s_instance; } } //유일한 매니저를 가져온다 // Start is called before the first frame update void Start() //반드시 부품으로 들어가있을때만 호출 가능함 (즉 monobehaviour이 필요함) { //초기화 //Instance = this; init(); } // Update is called once per frame void Update() { } static void init() { if (s_instance == null) { GameObject go = GameObject.Find("@Managers"); if (go == null) //@manangers가 없다면 { go = new GameObject { name = "@Managers" }; go.AddComponent<Managers>(); } DontDestroyOnLoad(go); //웬만해서는 삭제 안됨 s_instance = go.GetComponent<Managers>(); } } }using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { // Start is called before the first frame update void Start() { Managers mg = Managers.Instance; } // Update is called once per frame void Update() { } }
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
프리펩 - Rect transform 수정 관련
안녕하세요 며칠 전부터 간단해보이는 문제 때문에 고민하다가 질문 남겨요ㅠㅠㅠㅠ Q1 - 프리펩 수정 관련먼저, 강의 내용을 봤을 때는,프리펩 제작 후 수정하고 싶을 때는,-> 프리펩 수정 페이지에서 수정 or Scene의 Prefab Instance에서 수정 후 override (Apply All) 이 두가지 루트인데,이미지-source image 수정할 때는,위 두 가지 루트로 접근 시 전부 수정이 정상적으로 가능했습니다. 그러나, 사이즈 변경이 필요해서 사이즈를 변경하려고 Rect transform에 들어가서width, height 값을 수정했는데앞서 말한 두 가지 루트 모두 변화를 인식 못합니다.프리펩에 들어가서, 프리펩 수정 페이지에서 수치 변화 -> 적용 안됨개별 프리펩 인스턴스에서 값 수정 -> override 여부가 뜨지 않음 ( 변화 인식 못함) 관련 사진 첨부입니다..1- 프리펩 페이지의 실제 프리펩( 앞서 말했던 첫 번째 수정 방법을 확인하기 위해i) 먼저 프리펩을 43x43으로 제작 후 프리펩 화 > 이후 프리펩 인스턴스화ii) 그런 뒤, 프리펩 페이지에서 프리펩을 45x45로 변경 >>>> 수정 사항 적용 X( AutoSave 모드입니다.) 2- Scene에서 사용하고 있는 프리펩 인스턴스( 나머지 Inspector 요소들은 실험 도중 prefab 삭제 및 unpack 하다보니 길어졌네요.. 무시하셔도 됩니다 ) i) 수정 사항 변경 확인을 위해 43x43의 프리펩을 42x42로 변경했음에도,override 여부가 뜨지 않음 ( 변경 사항을 인식 못함)Q2 - 알 수 없는 오류.. Unable to rename a GameObject with HideFlags.NotEditable.UnityEngine.GUIUtility:ProcessEvent(int,intptr,bool&) >> 이 오류가 갑자기 노란색 에러로 뜨는데, 그럴 때마다 다시 껐다가 키면 사라져 있습니다..뭐가 문제일까요..? 오류는 검색하는데 이건 사례도 별로 없어서 12년도 자료 나오고 명확한 해결 방법도 안 나오네요..
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
배운것을 활용하여 프로젝트를 하다가 궁금한것들이 생겼습니다.
현재 강의에서 배운 내용을 활용하여 rpg게임을 개발하고 있는데 궁금한 것들이 생겨 질문하게 되었습니다.맵을 만들면서 맵에 있는 잔디나 나무들 때문에 렌더링 해야 될것들이 많아져 이를 어떻게 해결해야 될지 잘 모르겠습니다. 일반적인 경우에는 오브젝트의 거리별로 해당 오브젝트를 렌더링 할지 말지를 정하는걸로 아는데 이를 구현하는 방법을 잘 모르겠습니다.적들이 쫓아 올때 적들이 겹치거나 서로 밀리는 현상이 있었습니다. 그래서 navmeshagent에서 적들의 이동 우선순위를 결정 해주고 radius를 줄여보았지만 자연스럽게 되는게 아닌 옆으로 조금씩 밀리면서 되거나 몇마리는 앞에 있는 몬스터들에게 끼여 있는 현상이 생기더군요 이를 어떻게 해결해야될지 답변해주시면 감사하겠습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
매니저 생성 오류
public class TestUnity : MonoBehaviour { // Start is called before the first frame update void Start() { Managers mg = new Managers(); } // Update is called once per frame void Update() { transform.Rotate(new Vector3(1.0f, 1.0f, 1.0f)); } }해당 코드에서 Managers로 생성, 저장 후에 유니티로 들어가면Assets\TestUnity.cs(10,9): error CS0246: The type or namespace name 'Managers' could not be found (are you missing a using directive or an assembly reference?)라는 코드가 뜨는데 어떻게 해결해야 할까요.........
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
에셋 분홍색으로 뜰때 해결방법
Shader를 Standard로 바꾸기 이걸로 많은 분들이 해결되기를 바랍니다