[내일배움캠프] 실전 프로젝트 - 코드리뷰
오늘 팀원들과 3주차 마무리 그리고 4주기의 마무리를 하며 코드리뷰를 진행했다. 그간 작업해왔던것들을 코드를 기반으로 보여주며 설명들을 이어 갔다. 내가 작업했던 것들을 말을 통해 한번 더 복기 할 수 있는 시간이기도 했지만 작업을 하다보면 다른사람의 코드를 봐야하는 경우가 종종 있었는데 이렇게 코드 리뷰를 진행하며 모르는 부분, 이해하지 못한 부분들을 물어보고 설명해주며 진행 하는게 앞으로 작업 함에 있어서도 정말 좋은 시간이였던거 같다.
2024.01.26
no image
[내일배움캠프] 실전 프로젝트 - Terrain으로 맵 만들어보기
유니티 하이어라키창에서 우클릭 -> 3D Object -> Terrain을 누르면 Terrain(지형 또는 지역)이 하나 생성된다. 생성된 Terrain을 눌러보면 인스펙터 창에 Terrain, Terrain Collider 컴퍼넌트가 추가 되어있는걸 볼 수 있다. Terrain 컴퍼넌트에 5개의 버튼 중 두번째에 Paint Terrain 라고 나오는 버튼을 누른다. 누르고 보면 바로 아래 드롭다운 버튼 하나 있는데 눌러보면 아래 사진과 같이 선택지가 주어진다. 이 중 내가 사용해본 기능들을 소개하자면 Set Height : 선택한 영역의 높이를 변경하는 브러쉬 Paint Holes : 선택한 영역의 터레인을 지우는 브러쉬 Paint Texture : 등록해둔 레이어들로 선택 영역의 메테리얼을 입히는 브..
2024.01.25
[내일배움캠프] 실전 프로젝트 - 인벤토리 만들기
Inventory.cs using System.Collections; using System.Collections.Generic; using TMPro; using Unity.VisualScripting.Antlr3.Runtime.Misc; using UnityEngine; public class ItemSlot { public ItemSO Item; public int Quantity; } public class Inventory : MonoBehaviour { public ItemSlotUI[] UISlots; public ItemSlot[] Slots; public GameObject InventoryUI; [Header("Selected Item")] private ItemSlot selected..
2024.01.24
no image
[내일배움캠프] 실전 프로젝트 - 게임 공통시간 만들기
이전에 낮과 밤을 구현한적 있는데 그곳에서 필요한 코드들을 공용시간으로 돌리기 위해 GlobalTimeManager 스크립트를 하나 만들었다. Start부분 부터 살펴 보면 _timeRate = 1.0f / FullDayLength; 라고 적혀있다. FullDayLength에 입력한 값을 나중에 퍼센트로 바꿔서 사용하기 위해 1f로 나눠주는 모습이다. 다음은 Update부분에 DayTime = (DayTime + _timeRate * Time.deltaTime) % 1.0f; 위에서 만든 _timeRate를 Time.deltaTime에 곱하고 현재시간을 더해준다. 그 값의 1f로 나눠서 나오는 나머지 값으로만 DayTime를 측정하기 때문에 값은 0~0.999.. 까지 밖에 나올 수 가 없다. 여기까지는..
2024.01.23
[내일배움캠프] 실전 프로젝트 - 기술면접 연습 3
가비지 컬렉터에 대해 설명해주세요. 가비지 컬렉터란 힙 영역에서 더이상 사용되지 않는 즉 주소를 잃은 값들의 메모리블럭을 찾아 메모리 회수를 하는 역할을 수행합니다. 하지만 가비지 컬렉터의 과정이 무겁기 때문에 가비지 컬렉터의 발생을 줄이기 위해 노력해야 합니다. 가비지 컬렉터를 회피하기 위한 전략은 무엇이 있나요? 재사용가능 한 객체를 생성하는 방향으로 진행하는게 도움이 됩니다. 그리고 가능하다면 참조를 줄일 수 있는 만큼 줄이고 class 말고 struct 를 사용하는게 스택영역에 메모리를 사용하기 때문에 가비지 컬렉터의 영향을 받지 않는 방법이 될 수 있습니다. 가비지 컬렉션이란 무엇인지 설명해주세요. 메모리 관리 기법중 하나로 더이상 사용되지 않는 영역을 해제하지 않았을 때 그영역을탐지하여 자동으..
2024.01.19
[내일배움캠프] 실전 프로젝트 - 기술면접 연습 2
'ref'와 'out'의 사용 시 차이는 무엇인가요? ref 와 out 키워드는 변수를 참조 형태로 전달하는데 사용되는데 ref 키워드는 반드시 변수의 초기화가 되어서 전달이 되어야하지만 out 키워드는 변수의 초기화가 메서드 안에서 반드시 할당 되어야 합니다. 그 이유는 이전의 값을 모두 무시 하기 때문입니다. 접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요. 접근제한자란 말 그대로 외부로 부터 접근을 제한 시키는 용도로 쓰입니다. 기본적으로 설정이 되어있는 private은 외부로 부터 접근을 제한시키고 해당 클래스 내에서만 사용할 수 있습니다. 그리고 어디서든 불러올 수 있는 public, 상속을 받은곳에서만 불러올 수 있는 protected등이 있습니다. struct와 clas..
2024.01.18
no image
[내일배움캠프] 실전 프로젝트 - AI Navigation
AI Navigation은 설정해둔 지점과 지점으로 이동하게 길을 알려주는 역할을 한다. 이것을 사용하는 이유는 만약 지점과 지점을 최단거리를 통해 가는데 장애물이 있다면 가로막혀서 잘 동작하지 못할 것이다. 그래서 장애물을 인식하고 장애물을 피해서 최단 경로를 찾게 하기 위해 사용하는 것이다. 유니티에서 PackgeManager를 들어가 보면 AI Navigation 이라는 패키지가 있다. 다운 받지 않았다면 오른쪽 상단에 있는 Install 버튼을 눌러주고 다시 유니티로 돌아와서 Window를 보면 AI라는 Menu가 생겨있다. 그 중 Navigation(Obsolete)라는 것을 선택하면 관련된 창이 하나뜨고 다음 Plane이나 terrain을 하나 만들고 클릭하면 다음과 같이 뜬다. 위의 사진에 ..
2024.01.17
[내일배움캠프] 실전 프로젝트 - Finite State Machine
FSM : 유한 상태 기계(Finite State Machine) 디자인 패턴의 일종으로 상태와 상태 간의 전환을 기반으로 동작하는 동작 기반 시스템이다. 구성요소로는 상태, 전환 조건, 동작으로 이루어져 있으며 동작원리는 초기 상태에서 시작해 입력 또는 조건에 따라 상태 전환을 하고 상태 전환은 전환 조건을 충족하면 발생하며 전환 조건은 입력 시간 조건 등으로 결정할 수 있다. 상태 전환 시 이전 상태를 종료 동작과 새로운 상태의 진입 동작이 수행된다. 이걸 이용해 플레이어를 만든다면 정지 상태, 이동상태, 점프 상태, 공격 상태 등으로 명확하게 나눠서 정의한다면 상태 간 전환을 일관되게 관리 할 수 있고 복잡한 동작을 상태와 전환 조건을 ㅗ나누어 구현하게 됨으로 코드 유지 보수가 용이하다. 그리고 보..
2024.01.16
no image
[내일배움캠프] 실전 프로젝트 - Queue를 활용한 오브젝트 풀링
Queue를 이용한 오브젝트 풀 만들기 간단하게 테스트만 해보려고 단순 싱글톤화 시키고 테스트를 진행했다. 일단 class안에 struct으로 구조체를 하나 만들고 그안에 pool에 관련된 정보를 변수로 만들어 줬다. 굳이 struct으로 만든 이유는 메모리를 할당하는 공간이 class와 다르다는점에서 메모리 관리에 용이하다고 판단하고 안쓸 이유도 없기에 쓰게 되었다. 그뒤 struct을 제네릭을 활용한 리스트에 담아주고 Queue와 Dictionary까지 만들어 주었다. 다음 메서드에서 Dictionary를 초기화 해주고 리스트에 몇개가 담길지 모르니 foreach문을 -> for문 순으로 지정해둔 size만큼 오브젝트를 생성 해준다. Queue를 사용할 것이기 때문에 비활성화 해주고 선언해둔 _poo..
2024.01.15