월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Input질문
앞서 한 질문과 이어지는것 같기도 합니다. static Managers s_Instance; public static Managers Instance { get { Init(); return s_Instance; } } private InputManagers _input = new InputManagers(); public static InputManagers Input { get { return Instance._input; } } 와 같이 강의에서과 같이 코트를 짜면 유니티에서 원하는대로 캐릭터가 잘 움직입니다. 그러나 마지막 Instance._input를 s_Instance._input으로 바꾸거나 _input을 static으로 바꾸고 마지막에 return _input으로 바꾸는 등 Instance의 getter를 통하지 않고 _input을 호출하면 캐릭터가 움직이지 않습니다. 제가 생각했을 때 유니티 내 캐릭터는 PlayerController를 부품으로 가지고 있고 PlayerController는 Managers안에있는 Input 이라는 getter함수에만 접근했으니 Managers의 start함수는 실행되지 않는다? 라고 추론하긴 했습니다만 정확히 왜 이러는지 모르겠습니다. 그리고 또 궁금한점은 PlayerController를 유심히 보면 OnKeyboard함수는 Update부분이 아닌 Start부분에서만 구독할 수 있는데 우리가 키보드를 누르는 순간은 이미 play된 이후고, 그렇다면 이후에 저희가 누른 키보드는 더이상 구독될 수 없는것 아닌가요? 한번 구독하는 부분을 모두 Update함수로 옯겨본 후 play해보니 처음과 동일하게 캐릭터가 잘 움직였습니다. 이 부분은 정말로 이해가 가지 않습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
InputManagers과 static
이전 강의에서 Managers에 대하여 강의하실때 static Managers s_Instance; ... (1) static Managers Instance { get ... } ...(2) 이런 코드를 사용하셨습니다. 이에대한 저의 이해를 확한하겠습니다. (1)번에서 사용한 static은 다른 곳에서 같은 Managers타입의 새로운 클래스를 생성하는것이 싫고, s_instance라는 유일한 Managers를 이용하여 모두를 관리(?)하고 싶다는 뜻이고 (2)번에서 사용한 static은 다른곳에서 s_instance를 부르고 싶을 때 매니저를 new를 이용하여 새롭게 만들지 말고 형식이름을 통해 간접적으로 호출하기 위한 static이라는 뜻, 으로 이해했습니다. 이 이해가 맞는지 확인하고싶습니다. 이러한 이해가 맞다면 궁금한 점이 생깁니다. 첫째로 (이 질문은 처음 Managers를 생성하고 설명한 강의해서 했어야 할것 같으나 양해부탁드립니다.) 다른 파일에서 Managers를 생성하고 싶을 때에는 유일성이 보장된 Managers 내의 s_instance를 간접적이로 호출해야 하는데 다른 사람들이 Managers를 직접적으로 new를 이용해서 호출하는 참사(?)가 발생할 수 있다는 생각이 듭니다. 언듯 생각해보아도 Managers가 필요하면 Managers를 호출하는것이 Managers내부의 Instance를 호출하는것보다 더 직관적이기 때문에 이러한 실수(?)를 저지를 것 같습니다. 이러한 것을 방지하기 위해서는 Managers의 접근한정자를 public으로 열어두면 안될 것 같다는 생각이 듭니다. 이러한 이해가 맞는지요 두번째로 만약 Managers의 접근한정자를 public이 아니고 다른 접근한정자로 바꾸어서 다른곳에서의 접근을 제한하고 싶을 때 처음보는 이상한 빨간줄이 생성되었습니다. 조금 찾아보니 namespace에 정의된 클래스는 private가 안된다고 합니다. internal과 public만 가능하다고 하네요. 이 파일에는 namespace가 없는줄 알았는데 숨겨져있거나 컴파일할 때 자동으로 만들어주는 것인가요? 그리고 이것을 막아두는 이유는 무엇인가요? 세번째로 InputManagers _input = new(); public static InputManagers Input { get { return Instance._input; } } 과 static InputManagers _input = new(); public static InputManagers Input { get { return _input; } } 의 차이를 잘 모르겠습니다. inputManagers를 만드신 이유는 input이 발생하였을 때 한번에 해당 input을 처리하기 위함이라고 생각했습니다. 그렇다면 InputManagers는 처음 Managers와 비슷하게 하나의 클래스가 유일성이 보장되어야 할 것 같다는 생각이 듭니다. 이렇게 생각하면 InputManagers 인스턴스를 생성할 때 static으로 호출해야 할것 같다는 생각이 들지만 어차피 위의 버전이나 밑의 버전이나 private으로 다른곳에서 못보게 막아두고 getter를 통해 간접적으로 접근할 것이면 큰 의미가 있나 싶기도 하나 제가 생각 못한 이유가 있는것 같아 질문드립니다. 너무 길고 두서없게 질문한 것 같아서 죄송합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
UnityEngine.Object의 박싱/언박싱
안녕하세요 교육 잘듣고 있습니다. UnityEngine.Object의 경우 박싱/언박싱이 일어나는 것으로 알고 있습니다. 게임의 최적화를 위해서라면 박싱/언박싱을 줄이는 것이 최우선이 라고 알고있는데 해당 UI같이 실행 횟수가 비교적 적은 경우에는 편의를 위해 사용하는 것은 괜찮다고 생각하면 되나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Slerp
slerp함수에 처음벡터와 나중벡터 사이의 일정비율을 나타내는 상수를 넣었는데 그러면 회전하는 속도가 점점 느려지면서 컴퓨터가 더이상 차이를 인식할 수 없을 때까지(?) 최종값에 다가갈 것 같습니다. 여기까지 제가 이해한 것이 맞다면 질문은 두가지입니다. 1. 캐릭터를 회전시키고 싶을 때 현재 코드를 보면 회전이 시작되는 시간은 직관적으로 알 수 있으나 캐릭터가 원하는 방향을 바라볼 때까지 얼마나 키를 누르고 있어야하는지는 직관적으로 알 수 없습니다. 이를 알 수 있는 방법이 있나요 ? 아니면 경험적으로 유니티에서 키를 누르면서 시간을 측정해야하나요? 2. 지금은 Slerp함수에 처음 벡터와 나중벡터 (사원수), 그리고 한번의 운동으로 그 사이 중 얼마만큼 움직일지를 결정하는 비율(상수)를 넣어줬는데 이렇게 되면 매 순간 회전하는 속도를 제어할 수 없는 문제가 있는것 같습니다. Slerp함수에 상수 대신에 시간에 따른 함수값? 같은것을 넣어줄 수 있다면 좀더 자연스럽게 움직이는 캐릭터를 구현할 수 있을것 같다는 생각이 듭니다. 나중에 이러한 방법이 있나요? 아니면 지금까지 배운 회전법을 적절하게 사용하여 실제 게임과 같은 자연스러운 움직임을 구현할 수 있는 것인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Speed
코드에서 _speed가 유니티에서는 Speed로 보이는데 다시 코드에서 Speed라는 변수를 추가해봤더니 유니티에서 Speed가 두개로 나오네요. 유니티에서 왜 변수명을 바꾸어서 이러한 오류(?)를 나오게 하는 것인가요? 그리고 이런 문제를 해결할 방법이 있나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
문법질문
안녕하세요. 애니매이션 코딩을 선생님이랑 똑같이 작성하던 중에 float wait_run_ratio=0; 변수 선언하는 부분을 원래 void update함수 전에 넣는 것인데 실수로 update 함수 안에다가 넣는 실수를 해버리고 말았습니다. 제가 문법을 백프로 이해한 것은 아니라 그런지 왜 업데이트 함수안에다가 변수 선언을 하면 애니매이션이 제대로 작동하지 않는 거죠?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류를 모르겠습니다
강의를 보고 똑같이 따라 했는데 이런결과가 나오네요 유니티를 재부팅해도 결과가 같이 나왔습니다....
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
17:21 커서이동
17:21에서 getter수정하실 때 커서가 값자기 줄 끝이로 순간이동을 했는데 단축키를 못찾겠습니다. 어떠한 방법을 사용하신건가요
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
클래스 생성
Instance = GameObject.Find("@Managers"). GetComponent<Managers>(); 이렇게 호출하는것과 GameObject go = GameObject Find("@Managers"); Instance = go.GetComponent<Managers>(); 이렇게 호출하는 것 두가지 방법의 장단점이 있나요 제가생각했을 때에는 go라는 새로운 클래스는 @Managers 안의 Managers 클래스를 찾기위해서만 쓰이는 것 같은데 @Managers라는 전체 클래스를 계속 저장하고 있는것이 조금 손해를 보는 느낌이고 밑의 경우에는 만약 나중에 @Managers클래스를 다시 접근해야할 상황이 있을 때 위의 방법보다 접근이 용이한 장점이 있는 것 같습니다. 제가 이해하고 있는것이 맞는지, 그리고 제가 미처 생각하지 못한 다른 장단점이 있는지 질문드립니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Apply Root Motion 질문입니다
나이트 Aplly Root Motion 에 체크박스를 해제해도 공격하면서 슬라이딩하고 플레이어랑 겹쳐지는데 이건 애니메이션 종류의 문제인가요? 아니면 해결법 알려주시면 감사하겠습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
벡터 동적할당에 대해서
안녕하세요 여쭈어볼 게 있습니다! 이동하거나 회전할 때 Vector 를 사용하지 않습니까? 그런데 업데이트 함수에서 매초 마다 new 로 동적할당하는 것은 Heap에 그만큼 엄청난 과부하를 준다고 생각이 듭니다. c#은 수동적으로 메모리 관리를 할 수 없으니 사용자가 강제로 삭제를 할 경우 오히려 성능에 악영향을 준다고 알고 있습니다. 그래서 그냥 가비지 컬렉터가 삭제를 알아서 하게 내버려 둬야 한다고 그러더군요. 그래서 굳이 왜 매번 new로 저렇게 해줘도 성능에 아무런 지장이 없을까? 저 방법 말고 임의 고정 값을 스택에 할당하고 그걸 활용하는 것이 성능 향상에 엄청 낫지 않을까? 이렇게 생각이 들기도 합니다. 궁금증을 꼭 풀고 싶습니다 감사합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
가져오기(impoting)에서 더이상 진행이 안되요
가져오기(impoting)에서 더이상 진행이 안되요 , 커뮤니티 보고 '유니티를 위한 게임개발' 재설치를 반복했는데 사진처럼 중간까지 로딩하고 진행이 되질않습니다...
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Define.CameraMode _mode = Define.CameraMode.Quarterview;
Define.CameraMode _mode =Define.CameraMode.Quarterview; 가 이해가 안갑니다 ㅜㅜ static도 아닌데 말입니다 Define def = new Define(); def.CameraMode _mode = def.CameraMode.Quarterview; 이헐게 해야할거 같은데 에러가 나니 아닌건 맞는데 모르겠습니다 언제나 빠른 답변 감사합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
json파일로 확장자 변경시 오류
Unable to open Assets/Resources/Data/StatData.json: Check external application preferences. 확장자 변경후 파일로드하면 이런식으로 오류가 뜨는데 다른 방법으로 json파일 생성할 수 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
키보드 입력을 받으며 State 변경 질문입니다!
강의에서는 마우스 입력으로 State를 바꿔주셨지만 키보드 wasd 입력 등등으로 State를 바꾸고 싶어서 도전중인데 잘 안돼서 질문드립니다 ㅜㅜ State = Define.State.Moving; State = Define.State.Idle; 상태를 어디에 어떻게 넣어야 하는지 모르겠습니다! wasd 입력 조건문에 넣으면 moving 상태가 계속 되고 있기도 하고 .. 완전히 막혀버렸습니다.. 도움 주신다면 감사하겠습니다 ㅜㅜ 그 외에 조언이 있으시다면 마음껏 부탁드립니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
condition에서 attack이 없습니다
10:26 초 에 공격 모션을 연결하고 condition을 확인하니 speed밖에 없었습니다. attack을 다르게 설정할수있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
애니메이션 관련 질문드립니다.
안녕하세요, 강의 내용에 없는 것일 수도 있는데 오랫동안 궁금하던 것이라 여쭤봅니다. 쓰고 보니 글이 너무 길어져서 죄송하네요.그동안 유니티에서 Humanoid animation 을 적용했을 때 부자연스러운 현상이 좀 있었습니다. 1. Humanoid rig 적용된 캐릭터에 Humanoid animation 을 실행시켜보면 Body poking(옷 위로 몸체가 삐져나오는 현상) 을 자주 보게 되는데요, 해결 방법이 있을까요? 제가 강의를 들으면서 생각해 본건,- body와 cloth에 mesh collider를 붙인다. 근데 속도가 엄청 느려질 것 같고, 만들 수 있는 layer의 개수에는 한계가 있는데 캐릭터가 많아지면 어떡하나 싶네요ㅠ- 그리고 오래 전에 어떤 글을 본 것 같은데 cloth에도 body와 동일한 bone 구조를 줘서 body의 움직임을 그대로 따라가게 한다는 것이었나? 그런 방법도 있던 것 같습니다.. 2. 비슷한 문제일 수 있는데 Humanoid animation 실행 중에 특정 프레임에서 발의 일부가 바닥 아래로 빠지는 현상도 있더라구요.3. 캐릭터가 무기를 잡거나 휘두를 때에도 해당 캐릭터와 같이 제공된 애니메이션이 아니라, 별도 애니메이션 팩에 있는 걸 쓰게되면 무기를 붙잡는게 좀 자연스럽지 않아보였습니다. 찾아보니 2와 3은 해결하려면 IK(Inverse Kinematic) 라는걸 써야 하는 것 같던데 감이 잘 안 오네요..ㅠ 4. 마지막으로, 유니티 강의 게시판에서 언리얼 얘기를 꺼내서 정말 죄송하지만, (언리얼 강의도 내실테니 양해 부탁드려요~)cgtrader 에서 rigging된 캐릭터 에셋들을 검색해서 보면 언리얼의 경우는 epic skeleton이라는 걸 적용하더라구요. 그리고 그런 에셋들은 (epic 적용된) 언리얼 패키지와 (humanoid rig 적용된) 유니티 패키지를 같이 제공하는 경우가 많습니다. 하지만 애니메이션 실행 데모 영상은 항상 언리얼 쪽만 올려놓던데 언리얼에서는 이러한 Body poking 현상이 거의 나오지 않아서 그런 것인지도 궁금하네요. 언리얼 데모 영상에서는 poking 을 본적이 거의 없습니다. 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
유니티짱이 팽이가 되버렸어요
일단 작동은 합니다만 어째서인지 씬을 넘어가고 나면 애가 이상하게 변합니다 이 현상을 어떻게 고쳐야 할까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
질문있습니다
1. Resources.Load<GameObject>() 메서드를 사용할 때 기본 경로가 Assets/Resources인건가요?? 그래서 함수 매개변수로 Prefabs/Tank만 입력하면 됐었던건가요?? 근데 유니티에서 기본적으로 프로젝트를 생성하면 Resources라는 폴더가 없는데 우리가 임의로 생성해준 Resources파일로 알아서 찾아 들어가서 찾아오는건가요?? 그리고 만약 Resources라는 파일의 이름을 잘못 친다면 프리팹을 찾아올 수 없는건가요?? 2. Instanciate의 두번째 매개변수 parent를 설정해주면 그 게임 오브젝트의 자식 오브젝트로 생성한다는 뜻인가요?? 3. 앞부분에서는 Resource.Load를 사용하셨고 뒷부분에 ResourceManager에서는 Load를 사용하셨는데 둘이 차이점이 있나요?? 4. ResourceManager를 만들 때 그냥 기존 함수들을 래핑?매핑? 하는 부분이던데 이렇게 하는 이유는 나중에 break point를 찍어서 추적할 수 있기 때문에 저렇게 한건가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Instance 프로퍼티
Instance 프로퍼티를 이제 public으로 한다면 굳이 Instance프로퍼티를 남겨둘 필요가 있나요??? 혹시 public을 뺐음에도 프로퍼티를 남겨둔 이유가 있을까요?