월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
NullReferenceException 오류 입니다 ㅠㅠ..
void Start() { Bind<Button>(typeof(Buttons)); Bind<TextMeshProUGUI>(typeof(Texts)); Get<TextMeshProUGUI>((int)Texts.ScoreText).text = "Bind Test"; } void Bind<T>(Type type) where T : UnityEngine.Object //reflection 사용 { string[]names = Enum.GetNames(type); UnityEngine.Object[] objects = new UnityEngine.Object[names.Length]; _objects.Add(typeof(T), objects); for (int i = 0; i<names.Length;i++) { objects[i] = Util.FindChild<T>(gameObject, names[i], true); } } T Get<T>(int idx) where T : UnityEngine.Object { UnityEngine.Object[] objects = null; if (_objects.TryGetValue(typeof(T), out objects)==false) return null; return objects[idx] as T; }기존에 Text를 TextMeshProUGUI로 바꾸고 using TMPro;도 추가했는데도 계속해서 해당 오류가 발생하네요...도저히 원인을 못찾겠습니다 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
navMeshAgent에서 맵을 bake 하는데 장애물 안쪽이 자꾸 bake가 됩니다.
장애물도 navigation static이고 not walkable인데도 저 안쪽이 자꾸 걸을 수 있는 곳으로 표시가 되어서 몬스터들이 랜덤으로 walkable좌표를 찍는데 저기로 잡아서 자꾸 벽안으로 기어들어갈려고합니다. 제기억에 장애물을 설치해 놓으면 그 안쪽도 당연히 장애물로 막혀서 걸을 수 없는 구역으로 나왔던거 같은데... 왜이러는 걸까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
살짝 이해가 가지 않는 부분이 있네요.
적용?하지 않은 스크립트라도스크립트 상에서 적용?하면 생성 되는건가요?예를 들어 manager가 잘 작동되지만어디에도 생성은 하지 않았잖아요,Managers.Input.KeyAction -= OnKeyboard;Managers.Input.KeyAction += OnKeyboard;저는 게임플레이를 눌러도 Managers가 생성이 안되네요..근데 신기하게 input작동은 됩니다(이벤트 형식으로 바꿨습니다) DontDestroyOnLoad에도 안뜹니다...아래는 코드입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
11분 50초 실행결과
NullReferenceException: Object reference not set to an instance of an objectManagers.get_Scene () (at Assets/Script/Mangers/Managers.cs:52)->return Instance._ui;LoginScene.Update () (at Assets/Script/Scenes/LoginScene.cs:21)-> 오류 CS:21Managers.Scene.LoadScene(Define.Scene.Game);public class Managers : MonoBehaviour{ static Managers s_lnstance; //static이라는 전역변수를 통해 오브젝트인 @manager의 유일성이 보장된다 static Managers Instance { get { lnit(); return s_lnstance; } } SceneManagerEx _scene = new SceneManagerEx(); public static SceneManagerEx Scene { get { return Instance._scene; }static void lnit() //Instance가 널인 상태를 해결하기 위해 사용됨 { if (s_lnstance == null) { GameObject go= GameObject.Find("@Managers"); if (go == null) { go = new GameObject { name = "@Managers" }; go.GetComponent<Managers>(); } DontDestroyOnLoad(go); s_lnstance = go.GetComponent<Managers>(); } } } public class LoginScene : BaseScene{ protected override void Init() { base.Init(); SceneType = Define.Scene.Login; } private void Update() { if (Input.GetKeyDown(KeyCode.Q)) { public class LoginScene : BaseScene{ protected override void Init() { base.Init(); SceneType = Define.Scene.Login; } private void Update() { if (Input.GetKeyDown(KeyCode.Q)) { Managers.Scene.LoadScene(Define.Scene.Game); } } public override void Clear() { Debug.Log("Login Scene CLEAR!!!!!"); } }}뭐가 문제인지 잘 모르겠습니다 . 구글링 해본 결과 널의 값을 가질 수 없는 오브젝트에 널을 할당했다고 그러는데 잘 모르겠습니다 ㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
GetButton 에서 반복문을 통한 이벤트 등록 오류에 대한 질문
안녕하세요. 선생님.제가 프로그래밍 도중 Enum값 바인딩 한 부분에서 for문을 사용해서 순차적으로이벤트를 등록하려는데 1번 케이스의 경우는 정상적으로 작동하지만2번 케이스의 경우 정상적으로 작동하지 않습니다.. 이유가 뭘까요...? ///////// 1번 case GetButton((int)PetButton.PetType0).onClick.AddListener(() => OnTypePet(PetButton.PetType0)); GetButton((int)PetButton.PetType1).onClick.AddListener(() => OnTypePet(PetButton.PetType1)); GetButton((int)PetButton.PetType2).onClick.AddListener(() => OnTypePet(PetButton.PetType2)); GetButton((int)PetButton.PetType3).onClick.AddListener(() => OnTypePet(PetButton.PetType3)); //////// 2번 case for(PetButton i = PetButton.PetType0; i <= PetButton.PetType3;i++) GetButton((int)i).onClick.AddListener(() => OnTypePet(i));
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Bind 함수에 대한 질문입니다
Bind<T>를 하게 되면 해당 T 타입에 대하여 UI_Base에 있는 _objects에 저장이 되는 걸로 이해했는데, 그럴 경우 같은 Type을 서로 다른 코드에서 각자 부르게 되면 중복되어 사라지거나, 충돌이 일어나지는 않는 지 궁금합니다.예를 들어 UI_Button에서도 Init() 함수에서 Bind<GameObject>를 하고, UI_Inven에서도 Init() 함수에서 Bind<GameObject>를 하는데 이럴 경우 _objects에 이미 GameObject type에 대한 정보가 들어있는데 같은 type을 또 한번 bind하게 되는 게 아닌가요?왜 아무 문제가 없는 건지, 아니면 제가 C# 문법에 대해 잘못 생각하고 있는 건지 궁금합니다..ㅜㅜ감사합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
json으로 저장/로드 기능을 구현해보고싶은데요
게임을 껏다가 켜도 현재 젠 되어있는 몹의 숫자 몹의 위치 유니티짱의 현재 체력 레벨 등등을 저장하고 로드하는것을 구현해보고싶은데 제가 가진 짧은 지식으로 이렇게 접근하는 방향이 맞는지 한번 봐주세요 ㅠㅠ예를들어 몹이 30마리가 있으면 저장시 배열이나 딕셔너리에 현재 몹들의 데이터와 Vector3 위치 등등을 넘겨주고 json에 저장한다. 게임을 불러올때는 foreach문에서 json으로부터 받은 위치를 기반으로 전부 Instantiate한다!!..? 가 맞을까요 뱀서처럼 몹이 더 많아지거나 하면 엄청 렉걸릴것같은데 이렇게밖에 안떠오르네요 ㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
뭐가 문제인지 모르겠어요 4시간 동안 애쓰고 있답니다...
NullReferenceException: Object reference not set to an instance of an objectUtill.GetOrAddComponent[T] (UnityEngine.GameObject go) (at Assets/Script/Utills/Utill.cs:10)UIManager.ShowPopupUI[T] (System.String name) (at Assets/Script/Mangers/UIManager.cs:23)PlayerControler.Start () (at Assets/Script/PlayerControler.cs:67)먼저 오류 메시지는 이것입니다. 저는 UI_Button 프리펩 위치 Resources-Prefabs-UI-Popup폴더에 있구요UIButton 스크립트 Scripts-UI-Popup 폴더에 있습니다. 이제 코드는 Utill.cs:10 -> T component = go.GetComponent<T>(); UIManager.cs:23 -> T popup = Utill.GetOrAddComponent<T>(go);PlayerControler.cs:67 ->Managers.UI.ShowPopupUI<UIButton>();실행 전 UI_Button 프리펩 딜리트했다가 하이라키에 있는 UI_Button 오브젝트를 다시 프리펩화 한다음 그 오브젝트는 다시 딜리트 하여 실행 해본 결과 UI_Button가 뜨지 않고 저 에러만 납니다.뭐가 문제일까요 ???
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
학습순서
이제 3강까지 2회독 정도하니 대략 이해가 됩니다. 한번 정도 더 볼 생각인데. 샘이 올리신 실전게임 2개를 서버 들어가기 전에 해 보는 것이 나을까요? 바로 서버로 들어가는 것이 나을까요? 학습 순서 문의 드립니다. 감사합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
타격시 소리를 추가한다고 한다면
안녕하세요. 만약에 타격시 소리를 추가한다고 한다면PlayerController 클래스의 OnHitEvent 메서드에서 Managers.Sound.Play를 호출해서 재생시키면 될것 같아요. 근데 또 특정 UI 가 켜지고 꺼질때나 플레이어가 죽을때 등등 많은 부분에서 사운드를 재생하는게 필요할텐데 그때마다 Managers를 호출해서 Sound를 재생시키면 안될것 같다는 느낌이 왠지 들어요. 너무 여러곳에서 Managers를 호출하면 코드가 꼬이지 않을까 하는 걱정이요. 그래서 InputManager를 구현한것 처럼 Action을 사용해서 다른곳에서 Sound 재생을 등록시키는게 더 나은 방법일까요..?GameScene이라는 곳에서 여러 Manager들을 호출해서 게임에 관련된 작업을 하는건 합리적으로 느껴지는데 다른곳에서도 Managers를 계속 호출하는게 괜찮은지 여쭤봅니당
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
@Managers 생성 질문드립니다.
디버깅을 통해 @Managers가 생성되는 곳이 BaseScene에 Init이라는 것을 파악했지만, Init과 Managers.Resource.Instantiate 호출로 연관 없는 @Managers까지 생성되는 이유를 모르겠습니다.BaseScene.csprotected virtual void Init(){Object obj = GameObject.FindObjectOfType(typeof(EventSystem));if (obj == null)Managers.Resource.Instantiate("UI/EventSystem").name = "@EventSystem";}ResourceManager.cspublic GameObject Instantiate(string path, Transform parent = null){GameObject original = Load<GameObject>($"Prefabs/{path}");if (original == null){Debug.Log($"Failed to load prefab : {path}");return null;}if (original.GetComponent<Poolable>() != null)return Managers.Pool.Pop(original, parent).gameObject;GameObject go = Object.Instantiate(original, parent);go.name = original.name;return go;}
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
널 예외가 발생합니다.
안녕하세요.선생님이 작생해 주신 코드를 하나하나 검토를 해봐도 아래와 같이 널 예외가 발생합니다.어떤 문제가 있는걸까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
ResourceManager에 질문있습니다
public class ResourceManager{public T Load<T>(string path) where T : Object{return Resources.Load<T>(path);}}where T를 제거하면 오류가 뜨는데 그 이유가 있을까요 Managers쪽에 있는 ResourceManager resource = new ResourceManager(); 부분에서 궁금한점이 Managers s_instance는 싱글톤으로 유일성이 보장되었고 public static ResourceManager Resource{ get { return Instance._resource; } } 이런식으로 이루어 지는데 resource도 유일성이 보장되는 것인지 아니면 다른 곳에서 Managers.Resource가 호출되면 new ResourceManager로 새로운 _resource가 호출되는지 궁금합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
start관련 질문입니다
private void Start() { GameObject go = Resources.Load<GameObject>("Prefabs/Sword/Sword_1"); GameObject sword = Instantiate(go); }이런식으로 playerController스크립트의 start에 프리팹 생성을 넣었는데 하나만 생성되지 않고 계속 생성되어서 왜 이런 동작이 나오는지 궁금합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Action 질문
Action에 += 으로 함수를 추가하면 값이 복사가 되는건가요 아침 참조형식인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Slerp궁금증입니
if (Input.GetKey(KeyCode.W)) { transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward), rotateSpeed); transform.position += Vector3.forward Time.deltaTime speed; } if (Input.GetKey(KeyCode.A)) { transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.left), rotateSpeed); transform.position += Vector3.left Time.deltaTime speed; } if (Input.GetKey(KeyCode.S)) { transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.back), rotateSpeed); transform.position += Vector3.back Time.deltaTime speed; } if (Input.GetKey(KeyCode.D)) { transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.right), rotateSpeed); transform.position += Vector3.right Time.deltaTime speed; }이런식으로 하고 rotateSpeed를 1.0f로 한뒤 유니티에서 a를 살짝 눌렀는데 90도만큼 회전하지 않아서 왜 그런지 궁금합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Init()을 static으로 선언해 주신 이유가 있을까요?
Init()을 static으로 선언해 주신 이유가 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
GetComponent 함수 관련 질문이 있습니다!
선생님 언제나 좋은 강의 잘 보고 있습니다.싱글톤패턴 복습과정 중 이것저거 테스트하다s_instance에 값을 넣어 줄 때 저렇게 그냥 바로 GetComponent<>(); 해버려도 작동이 되더라구요GetComponent 함수가 특정 게임오브젝트에 있는 Component 를 가져오는것인 줄 알고 사용했는데 위 코드는 왜 동작하는지 이유를 알려주실 수 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
남은 수업 수강 질문
선생님 안녕하세요 강의 너무 잘듣고있습니다. 수업과 관련없는 질문이지만, 저는 현재 플레이팹 데이터 + Azure 클라우드 스크립트 기반의 간단한 싱글 모바일 게임을 제작하려고 합니다. 선생님의 유니티 수업 이후, 게임 서버와 DB, 웹서버 강의를 수강하게 되면 제가 이용하는 서버 기반 API는 수업과 달라도 지금 수업처럼 프레임워크를 짜는데 참고할 수 있을지 궁금해서 이렇게 질문을 드리게 되었습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
animation event
inspector 창에 다른 파라미터들?이 뜨게 하려면 어떻게 해야 하는지 알고싶습니다... 어떻게 이벤트를 생성해도 창이 뜨지 않아서 ㅠㅠ 넘어가질 못하고 있습니다