월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
@Managers가 2개 이상 있으면 어떻게 되는건가요?
안녕하세요 강의 너무 재밌습니다.! 그런데 하이어라키에서 오브젝트 이름을 바꾸어보니, 오브젝트의 이름이 중복되는 것에 제한이 없는 것 같은데, 같은 이름의 오브젝트가 2개 이상 있으면 GameObject.Find("")는 어떻게 작동하는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Singleton 패턴 관련 문의
안녕하세요. 강의 잘 듣고 있습니다. 제가 Singleton 패턴을 잘 이해한 것인지 헷갈려서.. 아래와 같이 메모해 두었는데 제대로 이해한 것일까요? //그러니까 // Manager s_instance = new Manager(); 이게 안되니까 // go라는 GameObject를 만들어 @Managers 라는 GameObject를 생성해 집어넣던지 있으면 찾아넣던지 하고 // @Managers에 Managers클래스(스크립트)를 컴포넌트로 같다붙인 뒤 // Managers 클래스의 static instance인 s_instance에다가 // @Manager라는 GameObject에 붙어있는 컴포넌트 -> Managers 클래스를 집어넣음으로써 // 결과적으로 Managers의 static instance인 s_instance에다가 // Managers 를 갖다넣음 즉 Manager s_instance = new Manager(); 이거를 // @Managers 라는 GameObject라는 애를 통해서 우회적으로 한 것임. 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
이 부분에서 더 배우고 싶으면 어떻게 해야 해요?
안녕하세요. 끝까지 참고 가본 뒤 질문해야 하는데, 궁금증을 못 참고 질문을 드립니다. json 파일은 이제 포토샵이나 스파인 같은 툴에서 스크립트로 쓰는 것을 많이 봤는데요. 그런데 다른 게임들의 경우 뭔가 데이터들이 다른 방식으로 숨겨져 있는 것 같아서요. 숨기는 방법에 대해서는 뭘 검색하거나 몇번째 파트 몇으로 가면 배울 수 있는지 궁금합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Slerp 함수에 관한 질문
Slerp 함수를 사용해서 북쪽을 본 상태에서 남쪽으로 방향으로 전환을 하게 되면 그 즉시 방향이 남쪽으로 변환이 되는건가요? transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.back), 0.5f); transform.position += Vector3.forward * Time.deltaTime * _speed; 코드를 살펴보고 실행결과를 보면 캐릭터가 북에서 남으로 자연스럽게 움직이지만 월드 좌표 방향으로 즉시 전환되는 듯 합니다. (즉시 전환되기 때문에 ransform.position += Vector3.forward * Time.deltaTime * _speed; 이 코드가 실행됐을 때 월드좌표 방향으로 가는 것이 아닐까 하는 생각입니다..) 제 개인적인 추측이지만 궁금해서 질문 올립니다. 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Vector3 연산자 오버로딩 질문
실제 Vector3 클래스를 살펴보면 연산자 오버로딩의 선언(?) 부만 있고 구현부는 찾아볼 수 없습니다. public static Vector3 operator +(Vector3 a, Vector3 b); public static Vector3 operator -(Vector3 a); public static Vector3 operator -(Vector3 a, Vector3 b); public static Vector3 operator *(float d, Vector3 a); public static Vector3 operator *(Vector3 a, float d); public static Vector3 operator /(Vector3 a, float d); 실제 구현부는 다른곳에 정의되어있나요? 감사합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
voice
Voice를 저도 실행 시키려고 했는데 오류가 뜨면서 실행이되질않습니다 ㅠㅠ Unable to open Assets/unity-chan!/Unity-chan! Model/Audio/Voice/univ0013.wav: Check external application preferences. 오류 내용으론 이렇게뜨는데 네이버 검색상 script Editor를 비쥬얼 스튜디오로 잘 설정되어있는지 확인해 보세요. [Edit] -> [Preferences] -> [External tools] -> [Exturnal Script Editor] -> [Visual Studio] 확인해보라고 합니다 하지만 비쥬얼스튜디오도 연결되어있는데 왜 안되는지 모르겠네요 ㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
다운로드 파일
강의 중간중간 있는 다운로드 파일은 강의 내용 작업 결과를 올려두신 건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
카메라#2번 강의 질문이요
주석 처리한 LookAt을 주석을 풀면 계속 넘어지는데 _destPos.y의 값을 확인해보니 -값으로 나오는거 같은데 그것 때문에 앞으로 넘어지는건지 궁금합니다 아무래도 영상에서는 안넘어지는거 보니 제가 어디 값을 잘못 입력한거 같은데 맞다면 다시 영상을 보고 해결 해보도록 하겠습니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
넘어간부분
part3 / Animation Event목차의 2:53초쯤에 event를 클릭하시고 2:55초쯤 갑자기 화면이 전환되면서 inspector의 Function->no function 부분이 function명을 입력할수 있게끔 바뀌는데 그부분이 어떻게 바뀌는지가 그냥 넘어간거 같습니다... 이부분 설명부탁드려요 ㅠㅠ 아 더보니 뒤에 설명이 나오는데,,, 이부분은 단순 운인가요? 한번도 나오지 않습니다.. 이름입력할수있게끔 ㅠㅠ 버전때문일까요.. 그리고 더 하다보니 9분쯤 나오는 유니티짱의 RUN00_F에 Events를 설정해주는 부분이 있는데요. 거기서 add Event해주고 Function 을 OnRunEvent를 설정한 후 해당 인스펙터를 빠져나와도 Save할건지 뜨지 않습니다. (근데 Save가 된거같아요. 다시들어가도 유지됩니다.) 그리고 스크립트 뚜벅뚜벅 입력후 Play해도 Log가 나오지 않습니다. state머신쪽에보면 event가 있는것이 보이는데 왜일까요..ㅜㅜ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
part 관련 질문 있습니다!!
포폴용으로 게임을 제작하려고 하는데 멘토님께서 서버까지 구동할 필요가 없고 싱글모드로 확실하게 구현할 수 있는 정도면 된다고 합니다. 그러면 part몇까지 학습하면 되나요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Unity 사운드 매니져 관련 질문입니다.
Sound Manager 파트의 Sound Manger #4 강의를 듣는 도중에 3D 음향 관련하여 궁금증이 생겨서 질문드립니다. 본래 강의 내용대로라면 3D 음향 처리를 위해서는 각각의 오브젝트(캐릭터, 몬스터, 기타 물체 등등)마다 AudioSource 컴포넌트를 부착하여 그래프를 조정하며 처리해야하는 것 같은데, 3D 음향같은 경우에도 굳이 각각의 오브젝트에 AudioSource 컴포넌트를 붙이지 않고 사운드 매니져쪽에서 AudioSource.PlayClipAtPoint()를 적절히 활용하여 2D 음향 외에도 3D 음향 등 모든 음향을 관리하는 것이 어떨까 하는 생각이 드는데 대형 프로젝트로 갔을때 이게 맞는 생각일지 의문입니다. 예를 들어 FPS 게임에서 BGM이 사운드 매니져를 통해 재생되고, UI의 사운드 처리도 사운드 매니져를 통해, 총을 발사할때 사운드 매니져를 통해 해당 위치에 3D 음향이 재생되고, 적이 총을 맞았을 때도 사운드 매니져를 통해 해당 위치에 3D 음향이 재생되는 형태로 만들려고 합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
3강 이후 수업에 관한 질문입니다.
3강에서 유니티로 3d게임 만드는법 배우고 4강부터 서버에 대해 배우던데 궁금한 점 있어 질문드립니다. [질문1] 7강과 9강 보니 아이템, 스킬 등 인게임기능 관련한 강좌가 여럿 있던데 이건 3강에는 없더라구요. 만약에 3강까지 듣고 아이템, 스킬 등 게임을 전반적으로 완성해놓고 4강을 들어도 되는지.. (예를 들면 무슨 몬스터는 무슨 아이템을 드랍하고 그 아이템 성능은 어떠하다. 각각의 클래스는 이런저런 스킬을 쓸 수 있고 효과는 이러저러하다. 등등을 미리 다 설정해놓음) 아니면 (번거롭게 일을 두번 하지않기 위해) 게임을 어느정도선까지만 만들어놓고 서버공부하면서 점차 완성시켜 나가야하는건지 궁금합니다. [질문2] 3강에서는 3d로 만드는데 후속 강좌에서는 2d로그라이크 게임을 만드시더라구요. 3강을 참조해서 3d로 만들면 4강이후에 강좌를 듣는데 어떤 일이 벌어지나요? 어려운 질문해서 죄송합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
레이어에서 비트 시프트 연산.
안녕하세요 영상보며 공부 열심히 하고있습니다. ㅎ 위에 마스크 연산을 해주셨는데 비트시프트를 1로 해주신 이유가 궁금합니다~!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Player가 없을 경우 Managers의 미생성 관련
안녕하세요!! 사소한 질문이지만 여쭤봅니다.. 강의 가장 초반에 설명해주시는 'Player가 없는 경우 Managers 조차 생성안되는' 이유는 무엇인가요..?? Hierarchy 상 Start()나 awake()를 호출하는 게임 오브젝트가 애초에 만들어져 있어야하는 건가요...? 그럼 Managers에도 Start()함수가 있는데도 생성이 안되는 이유는 애초에 Hierarchy상에 없었기 때문인가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
몬스터가 2마리 이상일때 움직임 오류
몬스터가 제대로 움직이지 않습니다. 처음에는 스포닝풀 관련 코드가 오류인줄알고 유심히 보다가 발견한 이상점은 제 캐릭터를 중심으로 마치 양대칭을 이루며(Z좌표 기준으로) 움직이지않습니다. 마치 몬스터와 나(캐릭터) 만 상호작용이 이루어져야하는데 몬스터 1의 z좌표 이동거리가 몬스터2의 z좌표이동거리와 상쇄되어 위 사진과같이 저렇게 제자리 걸음질만하네요.. 왜그런걸까요??
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
UI 자동화 2 - 강의 내용
선생님의 명강의 덕분에 경험이 차곡차곡 쌓이고 있습니다. 감사합니다. UI 자동화2 강의 초반에 있는 Get함수에 대해 궁금한 것이 있어 질문 드립니다.코드는 질문 : - return 된 배열 objects 의 데이터는 저장이 되어있거나 참조대상이 없는데 어떻게 데이터가 반환 되는지 궁금합니다. - 딱히 저장하거나 하는 부분이 없는데 이렇게 데이터가 잘 반환되는것이 의문입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 후반부에 나오는 오류가 저는 안떠요?!
강의 후반부에 Destory() 관련해서 설명하실 때, 강의상에서는 애니메이터가 포함된 오브젝트가 없어졌다라고 오류가 뜨던데 저는 해당 오류를 겪지 않습니다 poolable 관련해서 보면, 풀에는 4개의 유니티짱이 있고 하나는 scene에 있습니다. scene에 있는 녀석이 죽으면 오류가 안뜨고, 풀에 있는 걸 켜고 그게 죽으면 오류가 뜹니다 그 뒤에 나오는 부분을 따라해봐도 역시나 처음이랑 결과가 같습니다 한가지 더, 제가 알맞게 이해한건지 알고 싶습니다 마지막에 강의에서 가장 중요한 걸 짚어주실때, 이전 강의에서 참조형이 메모리에서 사라질 때를 설명하신 부분에 대한 걸 다시 한번 언급 하시더라고요. 여기서 제가 이해한건 poolable 적용이 된 오브젝트는 destroy이 되어도 이게 꺼진거지, 완전히 없어진건 아니라서 null 체크 하는것만으로는 충분하지가 않다. 그래서 extension에다가 IsValid()를 만든다. 이렇습니다. 그런데 계속 헷갈리는건 UnityChan이 poolable이건 아니건 어쨋든 Managers.Game.Despawn(targetStat.gameObject);로 없앤거잖아요? 그럼 그냥 없어져야 되는거 아닌가요? pool로 돌아가는게 아니라. 어느부분에서 이게 발생하는지 잘 모르겠습니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Bind 함수
안녕하세요 매번 새로운 강의 들을 때 마다, 이전 강의에서 본 코드들이 나오면 다시 챙겨보는 편입니다 UI_Base.cs의 Bind 함수를 보는데 의문이 생겨서요 public abstract class UI_Base : MonoBehaviour { Dictionary<Type, UnityEngine.Object[]> _objects = new Dictionary<Type, UnityEngine.Object[]>(); // TValue is set to UnityEngine.Object[] since it's unkown what type of Object will be stored\ public abstract void Init(); protected void Bind<T>(Type type) where T : UnityEngine.Object { 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++) { if (typeof(T) == typeof(GameObject)) objects[i] = Util.FindChild(gameObject, names[i], true); else objects[i] = Util.FindChild<T>(gameObject, names[i], true); if (objects[i] == null) Debug.Log($"Failed to bind {names[i]}"); } } 일단, UI_Base 및 이걸 상속하는 모든 클래스는 _objects라는 Dictionary를 가지게 됩니다 Bind()라는 함수를 호출하면, 먼저 인자로 들어간 이름의 enum을 가지고 string 타입의 배열과 object 타입의 배열을 만들어요 그리곤, object타입의 배열을 그것의 type과 함께, 처음에 만든 _objects안에 추가를 합니다 enum 속에 들어있는 내용물들의 수 만큼 루프를 돌면서, 이 크립트가 붙어있는 GameObject가 enum 속 내용물들과 동일한 이름을 가진 component가 있는지 확인을 하고 해당 component들을 return합니다 이렇게 생각을 하다 보니까 중간에 object 배열을 _object에 추가해주는 부분은 for loop를 지나고 난 다음에 해줘야 되는게 아닌가라는 생각이 들어서요 아니면 저렇게 써도, 앞서 추가한 objects가 업데이트 된 것이 _objects에도 반영이 되는 건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Util.FindChild<T>(gameObject, names[i], true)와 관련하여...
안녕하세요! 강의 복습 중에 또 질문이 생겨 질문드립니다! 이전 강의에서 다른 분 질문을 통해 componet.name은 결국 Button, Text 등 T 타입의 클래스를 컴포넌트로 들고 있는 게임오브젝트의 이름을 가져온다는 것은 이해가 되었습니다. 그렇다면 Util.FindChild<T>(gameObject, names[i], true) 함수의 return 값이 T component인데 디버깅한 장면에서 _objects 딕셔너리의 Value 값이 ("PointButton{Unity.Engine.UI.Button}")로 되어 있는 건 사실은 Button Component를 return 했지만 걔는 PointButton꺼야 라는 뜻인가요..? Get 함수를 만들 때 return 값을 다시 T로 캐스팅 하는 것을 미루어 보아 Bind 할때 objects[i] = Util.FindChild<T>(gameObject, names[i], true)에서 자동으로 Object로 캐스팅 되었다가(부모 클래스이기 때문에..?) 다시 꺼내 쓸때는 T로 캐스팅 해야하는 건가요..?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
OnHitEvent
여러가지 실험을 하다가 OnHitEvent() 함수 안에다 제가 분기문을 모두 주석처리 후 State = PlayerState.Moving 으로 한 뒤 플레이를 해봤습니다. OnHitEvent() { State = PlayerState.Moving } 그런데 이렇게 하면 캐릭터를 한번 공격한 후 유니티짱을 다른 곳을 클릭해서 움직이려 할 때 먹통이 되어 안움직이게 됩니다. 제가 생각하기로는 OnMouseEvent로 계속해서 이벤트를 듣고 그에따른 로직을 수행해야 할 것으로 생각이 되는데 OnMouseEvent_IdleRun 내부 최상단에 debug.log를 찍어보니 해당 함수가 호출도 않되더군요 영상대로 OnHitEvent에 State = PlayerState.Idle 이면 정상적으로 수행이 됩니다만위의 사항이 아무리 고민해도 왜 그런지 모르겠어서 질문드립니다.