월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
인덱스 수정
이 뒷 강의에서 어떻게 될 지 몰라서 시도를 해볼까 말까 고민중입니다 해당 강의 후반부에서 버그의 원인은 이렇잖아요? 처음 플레이어 선택 UI를 생성할 때 사용하는 For loop의 인덱스는 헤더를 불러 오지 않기 위해서, 1부터 시작합니다 그리고 해당 루프에서 PlayerPefs.GetInt()로 값을 불러오는데, 나중에 id가 될 자리에 for loop의 인덱스를 집어넣어서 PlayerPrefs.GetInt()의 키로 사용합니다 여기서 문제는 이 부분에서 키의 id 부분은 1부터 시작을 하고, 텍스트 파일에서는 0부터 시작한다는 거죠 그래서 i-1로 코드를 수정하셨는데 나중에 이부분을 손대지 않는 다고 하면 차라리 불러오는 텍스트 파일의 id를 1부터 설정해도 되지 않을까요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
엑셀 파일의 마지막 줄
이 마지막 줄이 필요한 이유를 알 수 있을까요? 혹시나 해서 마지막 줄을 지우고 코드에서도 마지막 줄을 무시하는 코드를 삭제해서 적용을 해봐도 잘 되는데 어떤 이유로 마지막의 빈줄을 넣어야 하는건가요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
이해가 안되는 부분이 있습니다
안녕하세요 첫 실행시, 이전 실행때 선택한 캐릭터가 첫번째 캐릭터가 아닌경우에 UI가 불필요하게 움직이는 버그를 다루는거라고 이해는 했습니다 이 강의를 바탕으로 제 개인 프로젝트를 만들고 있는데 첫 화면이 이 캐릭터 선택 화면이 아니라 로그인 화면입니다 거기서 문제가 발생했는데, 캐릭터 선택창이 켜지기 전까지는 Content아래에 생성된 메뉴 아이템들이 다 똑같은 위치에 자리 잡고 있어서 거리 계산을 똑바로 못 하더라고요 그래서 제가 일단 선택창을 첫화면으로 만들었습니다. 그러니까 스냅은 잘 작동합니다 Update() 가장 첫번재에서 메뉴 아이템간의 거리가 0일 경우가 있다고 하셨는데 이게 혹시 플레이를 누르고 얼마 지나지 않은 시간대를 말씀하시는 건가요? 앞선 강의에서 스크립트의 작동 순서를 바꾸기 까지 해서 왜 저 거리가 0인 순간이 발생하는건지 잘 모르겠습니다 그리고 거리가 0인 경우에 뒤에 나오는 Mathf.Lerp()가 먼저 실행 되어서 저런 움직이 나온다고 하셨는데 이것도 이해가 잘 안됩니다
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
일반 position과 Anchorded position
안녕하세요 강의에서 content의 위치를 변경할때는 더욱 안정적인 anchorded Position을 쓰는게 좋다고 하셨는데 왜 이게 더 안정적인건가요? 제가 아는 차이는 일반 position은 월드 좌표계를 쓰고 Anchored Position은 스크린 좌표계를 쓴다라고 알고 있습니다 좀 더 설명을 부탁드립니다
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
이게 왜 되고 왜 안되는지 모르겠습니다
안녕하세요 강사님 정말 오랜만에 질문 글을 올립니다 제가 지금 강사님 강의 들으면서, 그걸 적용할 프로젝트를 하나 따로 만들어서 진행하는데 여기서 이상한곳에서 막혀서요 글로 표현이 다 될 수 있을지는 모르겠으나 일단 한번 적어 보겠습니다 메뉴아이템 오브젝트 안에서는 캐릭터의 이미지, 이름, 데미지 등이 보여지는 UI가 있습니다 그냥 텍스트만 있는게 아니라, 텍스트UI가 보여지는 곳 아래에 칸을 보여주려고, 이미지 UI를 따로 넣었습니다 image UI들 위로, 텍스트 UI를 집어 넣었습니다, 차일드 오브젝트로서요 그런데 Sorting Layer 때문인지, 이 텍스트들이 이미지에 가려서 안보이더라고요 찾아보니까 Canvas 컴포넌트로 sorting layer를 오버라이딩 할 수 있다고 해서 그렇게 했습니다 가장 마지막 Sorting Layer는 UI 이고, 이미지 UI들에는 order 1번, 텍스트 UI에는 2번을 부여했습니다 이제 문제는 없을거라 생각을 했는데 한가지 문제가 생겼습니다저기 위에 말씀드린 이미지 UI - 텍스트UI 들을 덮도록 언락버튼을 만들었습니다이 버튼에는 Button, 및 Image 컴포넌트 외에Layout Element 컴포넌트(Ignore Layer - true, Layout priority - 0)과 Canvas 컴포넌트(Pixel Perfect - inherit, Override Sorting - false)이렇게 추가를 했습니다 여기서 이상한게, 만약에 이 Canvas 컴포넌트에서 Override Sorting을 활성화시키면 Scrollview의 Viewport에 있는 Mask 컴포넌트의 영역 밖에다가 지금 이 메뉴 아이템 오브젝트를 생성했을 때, 이 버튼이 보입니다 이걸 활성화 시키지 않으면 안보이고요 (이게 제가 원하는 결과물이죠) 그런데 또 이 Canavs 컴포넌트를 아예 꺼버리거나 제거하면, Sorting Layer 문제인건지, Mask 영역 내부에서도 안보입니다 그리고 이 버튼이 눌리질 않습니다 혹시 설명을 해주실 수 있을까요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
수업 소스 코드(스크립트)를 받아 볼 수 없을까요?
영상 편집상의 문제인지 모르겠지만, 정리할때 내용과 실습코드를 넣으실때가 약간 다를 때가 있는것 같습니다. 등등의 여러가지 이유로 선생님의 스크립트 코드와 비교해 보고 싶은데 스크립트 코드는 받아 볼 수 없나요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
MissingReferenceException 에러 문제입니다 ㅜㅜ
행성을 맞추면 아래와 같은 에러가 계속나네요. 지워졌는데, 그걸 다시 참조하려해서 그런다는 메시지것 같은데, 어디서 참조하려고 하는지를 모르겠습니다. 어떻게 해야 할까요? ㅜㅜ MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. ObjectPoolManager+ObjectPool.Create () (at Assets/ObjectPoolManager.cs:24) GameManager.Update () (at Assets/02_Scripts/GameManager.cs:68)
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
SetParent()의 worldPositionStays
API 다큐먼트에서는 부모 오브젝트와의 상대적인, position, scale 그리고 rotation이 해당 오브젝트가 기존과 동일한 world space position, rotation 그리고 scale을 가지도록 조정된다고 하는데요는 제가 스크립트에서 저걸 true로 놓고 하니까 menuItem 오브젝트들이 엄청 크게 생성되어서 스크롤 뷰로 들어오질 않던데 이게 처음에 instantiate할 때, 부모 오브젝트가 UI 였고 이거의 Rect Transform을 따라가서 그런거죠?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
TextAsset을 Start()에서 불러오는 이유
강의에서는 else에서 불러오면 계속 파일을 불러온다라고 하셨는데 이 말뜻이 이해가 안갑니다 혹시 이미 싱글톤으로 인스턴스가 생겼서, 새로 생성된 인스턴스가 Destroy()될 텐데, 이 없어질 인스턴스에서 파일을 불러오게 되면 NullReferenceException이 생길 경우를 대비한다는 말씀인가요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
Trigger
삭제된 글입니다
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
Translate() 와 로컬 좌표
이해를 한 것 같은데 확인을 해주셨으면 해서요 transform.position += Vector3.left * speed * Time.deltaTime; transform.Translate(Vector3.left * speed * Time.deltaTime); 위의 경우는 Vector3.left라고 왼쪽 방향으로 계속 벡터값을 더해주는데, 이걸 글로벌 좌표를 기준으로 더해주는거라서, 이 오브젝트가 어느 방향으로 바라보는지 관계 없이 무조건 왼쪽으로 이동이 된다고 말씀하시는 거죠? 아 그리고 OnBecameInvisible()이 SceneView의 카메라에도 반응 한다는거 언급 해주셨으면 합니다 좌표계 이해한다고 3d모드로 해놓고 실험하니까 Scene에서도 물체가 계속 보여서 사라지지 않더라고요 아래의 경우, Translate() 함수가 space.self라는 arugument때문에, Vector3.left의 방향 벡터가 로컬 좌표, 즉 해당 오브젝트가 바라보는 방향을 기준으로 적용이 되어서 곡선을 그리며 이동한다는 말씀이죠?
- 해결됨유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
오일러, 쿼터니언 전환시 해결책에 대해서 이해가 잘 안됩니다
먼저 첫번째 오류 케이스는 이걸 말씀 하시는 거죠? 오일러에서는 단순하게 x , y, z에 값을 바꿔주는 것으로 연산이 가능한데 반해, 쿼터니언은 짐벌락을 방지하기 위해서 w라는 축으로 보정을 해줍니다. 강의 상의 오류가 나타나는 코드를 보면 쿼터니언으로 받아와서, 단순히 x값만 바꿔주니까 문제가 생기는 거구요 만약에 (거의 불가능하겠지만) 임의로 변환된 x값에 해당하는 w값도 바꿀 수 있다면, 이 경우에 짐벌락이 발생 하지 않는 거라고 생각이 드는데 맞나요? 두번재 경우는, 마지막에 쿼터니언으로 값을 집어 넣어준다고 해도, 그 이전에 오일러로 연산을 하는 과정에서 짐벌락이 생기기 대문에 안되는 거구요 해결책들에 대해서 이해가 안가는건, 일단은 보여주신 해결책을 쓰면 짐벌락이 벌어질 가능성이 없다는건 값을 받아온다는 건, 매 프레임 마다, 현재 rotation 값을 가져와서 그런뒤에 거기에 변화된 값을 넣는 다는 거잖아요? 해결책을 보면 받아오는 부분만 빠지고, 아예 새로운 변수를 넣어서 대입해주는 거잖아요 왜 읽어주는 부분이 빠지면 해결이 되는지 모르겠습니다
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
bounds.size와 size의 차이
bounds.size 말고 그냥 size도 있길래 api 문서를 참고해서 알아보니까 bounds.size는 바운딩볼륨(해당 물체를 감싸는 임의의 범위라고 이해하고 있습니다)의 크기를 말하는거고 그냥 size는 렌더링을 할 사이즈를 말한다는데 차이가 뭔지 모르겠습니다 강의의 코드에서 배경화면 이미지의 넓이를 구하는 부분에서 bounds.size를 size로 대체하면 첫번째 update() 호출에서 첫번째 이미지가 사라집니다 그리고 매번 첫번재 이미지가 왼쪽 끝으로 움직일때마다, 선이 보이고요 저 두가지 프로퍼티의 차이가 뭔가요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
이렇게 하면 왜 안되는 걸까요?
Vector3 dir = Vector3.zero; if (Input.GetKey(KeyCode.W)) dir += Vector3.forward; if (Input.GetKey(KeyCode.S)) dir += Vector3.back; if (Input.GetKey(KeyCode.A)) dir += Vector3.left; if (Input.GetKey(KeyCode.D)) dir += Vector3.right; dir = dir.normalized; transform.Translate(dir * Time.deltaTime * 2); 이렇게 Update()안에 넣어뒀는데 제가 Vector3 vec = transform.position;으로 넣어 봤거든요 그런데 그 뒤로는 한번만 키입력을 받으면 그쪽으로 쭈욱 가던데요 왜 그런질 도통 모르겠습니다
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
오류 관련 질문
수업을 보면서 똑같이 코드를 작성했는데 2가지 오류가 발생하여 질문드립니다. 1. [오류문구] NullReferenceException: Object reference not set to an instance of an object MenuItemScript.SetUI (System.String shipName, System.String shipLevel, System.String shipDmg, System.String shipNextDmg, System.Int32 locked, System.Single unlockCoin) (at Assets/02_Script/MenuItemScript.cs:23) MenuManager.Start () (at Assets/02_Script/MenuManager.cs:24) [행동] 오류를 확인하기 위하여, (1) MenuItemScript.cs:23 code: unlockCoinText.text = unlockCoin.ToString(); (2) MenuManager.cs:24 code: curItem.SetUI(ship.name, ship.chr_level.ToString(), ship.dmg.ToString(), ship.nextDmg.ToString(), ship.locked, ship.unlockCoin); 를 확인해봤지만 특별히 문제될만한 부분은 없었습니다. 2. [오류문구] ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <eae584ce26bc40229c1b1aa476bfa589>:0) System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <eae584ce26bc40229c1b1aa476bfa589>:0) System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <eae584ce26bc40229c1b1aa476bfa589>:0) ScrollViewSnap.Update () (at Assets/02_Script/ScrollViewSnap.cs:36) [행동] 오류를 확인하기 위하여, (1) ScrollViewSnap.cs:36 code: float item1Pos = item[1].GetComponent<RectTransform>().anchoredPosition.x; 를 확인해봤지만 특별히 문제 될만한 부분은 없었습니다. 특히 해당 부분은 이번 강의와 상관이 없는 부분으로 보이는데, 기존까지 강의 대로 실행하는 과정에서 전혀 문제가 되지 않다가, 이번 강의 코드를 작성하는 과정에서 발생하였습니다. 혹시 오타가 있을까 싶어, 강의를 4-5번 돌려가면서 코드 오타를 확인했고 오타는 전혀 없는 상황입니다. 어떤 부분에서 제가 실수했는지, 또 오류가 있는것인지 궁금합니다. 현재 상황은 id: 2 base_dmg: 2 name: Bomber kName: 폭격기 unlockCoin: 5000 chr_level: 1 locked: 1 dmg: 2 nextDmg: 4 UnityEngine.Debug:Log (object) Game.ShipData:Show () (at Assets/02_Script/GameData.cs:43) GameDataScript:Start () (at Assets/02_Script/GameDataScript.cs:73) 이렇게, unlockCoin을 제대로 읽는 것까지는 수월하게 잘 되는데, 그 이후 과정에서 오류가 발생하는 것 같습니다. 해당 부분은 이미지로 캡쳐해서 드리겠습니다.
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
Encapsulation에 대하여
강의 후반부에, 프로퍼티를 통해서 입력 값의 범위를 제한 하는 예시를 보여주시면서 _point라는 변수에 캡슐화가 적용된거라고 하셨는데요 범위가 제한 되는 것 같은 로직이 적용될 때만 캡슐화라고 하는 건가요 아니면 해당 변수에 직접 접근을 막아놓고, 프로퍼티를 통해서만 접근 하도록 해둔것 자체가 캡슐화 인건가요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
이 경우에는 왜 안되는건지 모르겠습니다
계층뷰에서 Cube와 빈 GameObject하나를 만들었습니다 GameObject에 InputTest라는 스크립트를 부착했습니다 InputTest에는 OnMouseDown(), OnMouseDrag(), OnMouseUp()을 넣었고 각각 함수 이름이 print()로 출력이 되도록 했습니다 이상한건, 이 상태에서는 플레이 상태에서 Cube를 클릭했다고 해도 아무런 메세지가 뜨질 않습니다 그래서, Cube에 InputTest 스크립트를 부착했는데 되더군요요심지어 해당 스크립트를 비활성화 시켜도 됩니다 OnMouse류의 함수들은 반드시 대상 게임 오브젝트에 부착 되어야 하는 건가요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
Start()와 Update()
안녕하세요 Start()함수의 시작 타이밍(?)에 대해서 여쭤보고 싶어서요 항상 게임이 시작하면 호출되는 함수라고 생각을 했는데 강사님께서 게임오브젝트가 메모리에 올라가면 한번 호출 된다고 하셨잖아요. 이 말은 메모리에 올라가는 순간이 다르면 각각의 Start() 함수의 호출 시기도 다르다는 말이죠? 그럼 Update()의 경우에도, 최초의 호출 타이밍이 각 게임오브젝트마다 달라지겠네요? 음.... 그렇다면, 희박할 것 같긴한데 서로 다른 게임오브젝트의 Update() 호출 타이밍 때문에 엉키거나 하는 일은 발생하지 않나요?
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
구조체 질문
Flash라는 이름의 구조체가 있다고 했을때 Flash fla = new Flash(); 로 구조체를 만들수 있잖아요? 여기서 선생님은 Flash가 x ,y 를 변수로 가지고 있다면 xIn yIn 이 각각 매개변수라 했을때 이것들의 메모리가 생기고 값을 대입했다가 최종적으로는 x ,y에 대입하고 사라진다고 하셨는데요. 궁금한점이 선생님께서 new Vector3() 생성자는 Vector3라는 새로운 구조체를 만드는것이 아니라 그냥 위의 과정을 명령하는 것이라 하셨습니다. 여기서 Vector3 구조체를 보시면 Vector3 vec = new Vector3(1,2,5); 이렇게 했을때 Vector3 anoVec += vec * 3f; 라 한다면 = 연산자로 구조체의 new는 명령하는것이라 알고있었던 저에게 +=연산자에다가 3f를 곱하기 까지하는걸 봤을때 "Vector3 구조체를 새로 만든다" 라고 생각하지 않으면 이해가 힘들었습니다. 정확한 원리가 무엇인가요? 자세히 알려주시면 감사하겠습니다. 아니면 제가 아직 강의를 듣고있는중이라 나중에 추가 설명이 나온다면 그렇게 말해주시면 감사하겠습니다.
- 미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
Test Script의 Stack
Test Script의 Stack 이 표현에 대해서 자세하게 설명 부탁 드려요 제가 느낀 바로는, 스크립트 하나당 메모리 공간을 가지고 이 공간이 Stack과 Heap으로 나뉘는 것 같거든요 여태까지 저는 컴퓨터에 달려있는 메모리는 하나의 덩어리로 생각하고 거기서 Stack과 Heap으로 나뉜다고 생각했는데 틀린건가요?