월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
저도 마지막 점수 올리기 부분에서 막혀서 질문 드립니다
Button을 눌러도 아무런 일이 일어나지 않네요. PointButton에 On Click()에 UI_Button을 넣었다 없앴다가 했는데 On Click()시에 할 수 있는 Function도 없네요. 뭐가 문제일까요? 다른 분이 질문하신 것 읽어봤는데 -=, += 순서는 올바르게 했더라구요 아래는 제 UI_Button.cs 입니다. using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class UI_Button : UI_Base { enum Buttons { PointButton } enum Texts { PointText, ScoreText } enum GameObjects { TestObject, } enum Images { Itemicon, } private void Start() { Bind<Button> (typeof(Buttons)); Bind<Text>(typeof(Texts)); Bind<GameObject>(typeof(GameObjects)); Bind<Image>(typeof(Images)); GetButton((int)Buttons.PointButton).gameObject.AddUIEvent(OnButtonClicked); GameObject go =Getimage((int)Images.Itemicon).gameObject; AddUIEvent(go, (PointerEventData data) => { go.transform.position = data.position; }, Define.UIEvent.Drag); } int _score = 0; public void OnButtonClicked(PointerEventData data) { _score ++; Debug.Log($"{_score}"); GetText((int)Texts.ScoreText).text = $"점수 : {_score}"; } }
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 잘 듣었습니다. 개인적으로 궁금한것이 있어 질문드립니다.
지금 할 질문이 개발자와는 상관 없지만, JSON이 SML보다 직관적 이긴하나, 레벨디자인을 하는 기획자 입장에는 데이터가 많아지면 JSON자체 파일로 관리하기 힘들어보입니다. 저가 현업에 대하여 잘몰라서 그러는데, 현업에서는 JSON자체 파일을 수정하기 보다는 엑셀을 이용해 데이터를 작성한후 JSON으로 변환하는 과정을 거칠 것으로 예상하는데 맞나요? 만약 그러지 아니하면 무슨 문제점이 있기에 하지 않은지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Extension 문법
안녕하세요 해당 클래스 디자인 패턴??이 너무 신기해서 원리 구조가 궁굼해서 여쭈어 봅니다. 추측상 정적 특징과 + this의 기능이 합쳐져서 GameObject go; go.AddUIEvent(go(암시적), Action, Define); 이렇게 된다는 것인데... 이게 좀 논리적으로 보았을 때, c#이 억지로 기능을 편의상 개조했다?? 이런 느낌을 받습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
3D 사운드 가까움 멀어짐
3D로 설정해봤는데 CubeTwo와 멀어져도 소리크기가 똑같은데 혹시 제가 잘못 설정한 것이 있을까요?일단 다 만져보긴 했는데 그래도 안되네요..
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
상속된 클래스 실행순서
init()함수에 대한 저의 이해가 맞는지 확인받고싶습니다. 처음 유니티를 Game scene에서 실행하면 게임 오브젝트 @Scene의 컴포넌트중 스크립트파일인 GameScene이 검사(?) 실행(?)이 되는데 이 파일을 실행할 때 이 파일이 상속하고있는 모든 부모클래스들을 같이 실행하고, 이때 부모클래스에 있는 start함수는 무시(?)되지만 awake함수에 있는 부분은 무시되지 않고 실행된다. 한편 이 스크립트가 상속하고 있던 BaseScene클래스에는 awake함수가 있었고 이 안에는 가상함수 Init()의 실행문이 존재했는데 이 실행문은 자식클래스인 GameScene에서 override된 상태이므로 자식클래스의 Init함수를 대신 실행하는데 자식클래스의 Init함수에서 base.Init()때문에 부모클래스의 BaseScene의 Init함수까지 같이 실행되었다. 적고나니 길고 어지럽네요. 죄송합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류
. 강의를 보면서 UL/UI_Button.cs를 지우고 수업자료를 다운 받아서 원래 있던자리에 UI_Button 스크립트를 넣었더니 이런 오류가 나옵니다. 어떻게 해야 하나요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
집행검 클릭시 호출이 안되는 상황
맨 마지막에 집행검 눌렀을 때 호출이 되어야 하는데 안되는 상황인데, 코드는 정확하게 썼는데 무엇이 안되는지 오류도 안뜨니까 못찾겠습니다... 중단점 찍어봤는데 코드는 F11 누르니 이리저리 잘 타고 다니던데.. 결국 못찾았습니다. rookiss@naver.com 으로 파일 보냈습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
프레임에 대한 질문
실행되는 순서를 따라가다 보니 햇갈리는 부분이 있어 질문드립니다. UI_Inven 클래스에서 Init()함수부분을 보시면 UI_Inven_Item의 frefab을 생성하고 UI_Inven_Item클래스를 붙여준 후 SetInfo()를 하는 부분이 있는데 저는 처음에 UI_Inven_Item 인스턴스가 되면 Start()가 실행되어 SetInfo()가 씹히고 실행되는 줄 알았는데 도큐먼트를 살펴보니 Start는 첫 번째 프레임이 업데이트 직전에 실행된다고 적혀있어서 위 내용이 한프레임 안으로 일어나서 정상적으로 실행 되구나라고 생각 하려고했는데 혹시나 몰라서 Debug를 찍어보니 UI_Inven의 for문이 모두 돌아서 나온후 UI_Inven_Item의 start가 차례되로 실행 되더라고요. 그럼.. 한 프레임은 UI_Inven 클래스에서 Init()이 모두 완료되었을 때가 한 프레임 인가요? 저는 프레임이 세미콜론이 끝나는 부분이 프레임이 넘어가는 걸로 생각 하고있어서 저의 생각이 틀린것 같아 바로 잡고싶네요 이번 경험으로 유니티 실행순서에 관해 공부해보게 됬네요
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
무엇이 오류인지 모르겠습니다...
무엇이 오류인지 모르겠습니다 ㅠㅠ
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Local 좌표계와 World 좌표계에 대한 질문입니다.
안녕하세요! 앞선 질문들에서 어느정도의 해답을 얻었지만 제가 맞게 이해했는지 궁금하여 질문 드립니다. TransformDirection, 즉 Translate를 이용하지 않으면 해당 좌표계(Vector3.forward, back 등..)는 local 좌표계지만 월드 좌표계로 인식되어 키 입력 시 월드 좌표계로 동작합니다. 이후, TransformDirection 혹은 Translate를 이용하면 local 좌표계를 world 좌표계로 변환시켜, 즉 world 좌표계가 인식할 수 있게 통역을 해주어 local기준(gameObject기준)으로 키 입력이 된다고 이해했습니다. 제가 이해한 것이 맞는지, 혹은 어느 부분이 틀렸는지 궁금합니다~! + 추가 질문입니다. transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed); 에서 TransformDirection을 이용하면 local 좌표계가 world 좌표계로 변환된다고 하였는데, transform.position += transform.forward * Time.deltaTime * _speed; 와 같이 transform.forward를 사용하면 변환하지 않고 바로 사용 가능합니다. 그 이유가 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
using
using System을 통해 Action을 구현하는것과 System.Action으로 구현하는것은 성능상 동일한가요
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
RaycastHit hit 할당 궁금점
안녕하세요 강의 잘 듣고 있습니다. 10:40초에서RaycastHit hit; Physics.Raycast(ray, out hit, 100.0f) Debug.Log($"{hit.collider.gameObject.name}")에서 두번 째 줄을 지우면 hit이 할당되지 않는다고 합니다. 어떤 방식으로 Physics.Raycast(ray, out hit, 100.0f)가 hit을 할당해주는지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
변수선언
지금 강의와는 조금 동떨어진 질문이지만 Update함수를 매 프래임마다 실행되는 반복문(?)처럼 생각하고 있는데 갑자기 반복문 안에서 변수를 사용한다고 할 때 변수선언의 위치에 대하여 궁금한 점이 생겼습니다. 반복문 안에서만 사용되는 변수를 선언할 때 반복문 안에서 int a = 1; 이러한 방식으로 선언을 하는것과 반복문 밖에서 int a;를 선언하고 나중에 반복문 안에서 a= 1;이라고 선언하는것과 성능상의 차이가 있나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
evt.OnDragHandler 에서 문제가 생겼는데
이유를 모르겠네요...혼자서 3시간 동안 끙끙 대다가제꺼 파일을 메일로 보내볼게요. 확인 부탁드립니다rookiss@naver.com 으로 보냈습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류 : NullReferenceException
강의의 4:40초인 Debug.Log(Input.mousePosition); 에서는 정상 작동을 하는데 그 이후 과정인 Debug.Log(Camera.main.ScreenToViewportPoint(Input.mousePosition)); 을 입력하고 실행 시 위의 널레퍼런스익셉션 오류가 뜨네요 ㅠㅠ 어떻게 해결해야하나요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오류 : NullReferenceException
안녕하세요 강사님 ! Raycast 부분 듣고 코드를 똑같이 따라 썼는데 NullReferenceException 오류가 발생합니다 ㅠㅠ NullReferenceException: Object reference not set to an instance of an object TestCollision.Update () 어떻게 해결해야 할까요..
- 미해결[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함수에 상수 대신에 시간에 따른 함수값? 같은것을 넣어줄 수 있다면 좀더 자연스럽게 움직이는 캐릭터를 구현할 수 있을것 같다는 생각이 듭니다. 나중에 이러한 방법이 있나요? 아니면 지금까지 배운 회전법을 적절하게 사용하여 실제 게임과 같은 자연스러운 움직임을 구현할 수 있는 것인가요?