[Unity/UI] Anchor Presets를 활용해 UI 해상도 대응시키기
·
Unity/UI & UX
A. 앵커(Anchor)란?앵커는 UI나 특정 오브젝트가 부모 화면 내에서 어느 위치를 기준으로 고정될지 결정하는 기준점입니다.화면 크기나 해상도가 달라져도 UI가 의도한 위치에 정확히 자리 잡도록 돕는 핵심 기능입니다.쉽게 말하자면, UI의 Pos는 pivot이 anchor로 부터 떨어진 정도입니다.즉 앵커가 기준점이 될 수 있다 할 수 있겠네요. B. Anchor Presets 사용해보기UI Rect Transform의 좌측 상단을 누르면 Anchor Presets 창이 열립니다.보통 middle center로 고정이 되어 있어요. shift와 alt 아무것도 누르지 않은 상태로 클릭할 시, anchor의 위치만 바뀌게 됩니다. (stretch는 나중에 다루겠습니다.)위 사진은 anchor를 top ..
[Unity/UI] Canvas RenderMode / Canvas Scaler 해상도 조절하기
·
Unity/UI & UX
A. 캔버스(Canvas)란?캔버스란 UI를 생성하기 위한 종이입니다.유니티의 일반적인 게임 오브젝트는 World Space에 배치하게 됩니다.반면 UI는 모니터 화면에 2차원으로 딱 붙어서 보여야 합니다.캔버스는 UI를 화면에 렌더링 해 줍니다. B. Render Mode캔버스를 생성한 뒤, 인스펙터 창을 보면 Render Mode라는 옵션이 있습니다.캔버스를 화면에 어떤 방식으로 띄울지 결정하는 설정입니다. 1. Screen Space - Overlay (기본값)개념 : 게임 화면 가장 앞쪽에 위치하는 2D 창입니다.특징 : 게임 속 카메라가 어디를 비추고 있든, 3D 오브젝트가 어디에 있든 UI가 무조건 화면 최상단에 고정됩니다.주로 전체 화면 UI, 게임 HUD (체력 바, 스킬 창, 미니맵) 등..
[C++/자료구조] 세그먼트 트리(Segment Tree)
·
C++/C++ Data Structure
A. 세그먼트 트리(Segment Tree)란?세그먼트 트리란 특정 구간의 데이터 합, 최솟값, 최댓값 등을 빠른 속도로 구하기 위해 만드는 이진트리입니다.예를 들어 크기가 10,000,000인 배열이 있고, 두 가지 작업을 수천 번 반복해야 한다 가정해 봅시다.i번째 숫자를 다른 숫자로 바꾸기L번째부터 R번째까지의 숫자 합 구하기일반 배열을 사용할 경우, 값 변경은 O(1), 구간 합은 최악의 경우 O(N)의 시간이 걸립니다. 이걸 M번 반복하면 총 O(N * M)이 프로그램이 터져버립니다.반면 세그먼트 트리를 활용한다면, 값 변경과 합 구하기 모두 O(log N)의 시간복잡도로총 시간 복잡도를 O(M log N)으로 획기적으로 줄여줍니다. 한마디로, 배열의 값이 자주 바뀌는데 구간합 또는 최대, 최소..
[C++/자료구조] 이진트리(Binary Tree)
·
C++/C++ Data Structure
A. 이진트리(Binary Tree)가 무엇일까?이진트리는 '모든 노드의 자식 개수가 최대 2개'인 트리를 의미합니다.왼쪽과 오른쪽 두 갈래로만 뻗어나가기 때문에, 구조가 단순하면서도 컴퓨터가 탐색하기에 매우 효율적입니다. B. 이진트리의 종류이진트리는 자식 노드들이 어떻게 배치되어 있느냐에 따라 이름과 특징이 달라집니다.포화 이진트리(Perfect Binary Tree)모든 리프 노드가 같은 레벨에 있고, 모든 부모 노드가 자식을 정확히 2개씩 꽉 채워 가지고 있는 트리입니다.완전 이진 트리 (Complete Binary Tree)위에서부터 아래로, 그리고 왼쪽에서 오른쪽 순서대로 빈칸 없이 채워진 트리입니다.마지막 레벨은 오른쪽 끝이 비어있어도 괜찮지만, 중간에 공백이 있으면 안 됩니다.편향 이진트리..
[C++/자료구조] 트리 (Tree)
·
C++/C++ Data Structure
A. 트리(Tree)가 무엇일까?트리(Tree)는 나무를 뒤집어 놓은 것처럼, 데이터를 계층적인 구조로 저장하는 자료구조입니다.배열이나 리스트 같은 선형 자료구조와 달리, 컴퓨터의 폴도 구조나 회사의 조직도처럼 부모 - 자식 관계를 가집니다. 트리의 핵심 용어들은 다음과 같습니다.노드(Node) : 데이터를 담고 있는 동그라미 하나하나를 의미합니다.루트(Root) 노드 : 트리 맨 꼭대기의 시작 노드, 부모가 없는 유일한 노드입니다.부모-자식(Parent-Child) : 선으로 연결된 위아래 관계를 뜻합니다. 위쪽이 부모, 아래쪽이 자식 노드입니다.리프(Leaf)노드 : 맨 밑바닥에 자식이 없는 노드들입니다. 단말 노드라고도 부릅니다.간선(Edge) : 노드와 노드를 연결하는 선을 뜻합니다.배열이 있는데..
[C++/자료구조] 연결 리스트(Linked List)
·
C++/C++ Data Structure
A. 연결 리스트란?연결 리스트(Liked List)는 데이터를 한 줄로 연결하여 관리하는 대표적인 선형 자료구조입니다.기존의 배열(Array)나 Vector는 아파트처럼 메모리 공간을 붙여 통째로 사용하는 방식이라면,연결 리스트는 주택들이 각 다음 주택의 주소를 가지고 있는 형태입니다.\이 주소(노드)를 가진다는 게 핵심 개념입니다. 연결 리스트는 노드(node)들이 엮여있는 구조입니다.struct Node { int data; // 데이터 Node* next; // 다음 노드의 주소를 가리키는 포인터};이 노드들의 가장 첫 번째 노드를 Head, 마지막 노드를 Tail이라 부르며, 마지막 노드의 next 포인터는 다음 주소가 없기 때문에 nullptr을 가리킵니다.B. 예..
[Unity] IDE로 디버깅 해보기 (RIDER)
·
Unity/Unity Core (기초 개념)
A. 디버깅이란?유니티에서 디버깅(Debugging)이란 개발하는 과정에서 발생하는 코드의 오류나, 원치 않은 오작동을 찾아내고 해결하는 과정을 말합니다. 단순히 코드가 왜 안 돌아가지를 넘어, 게임이 실행 중인 실시간 상태에서 메모리에 어떤 값이 들어가는지, 어떤 함수가 어떤 순서로 실행되는지 추적할 수 있습니다. B. 디버깅 해보기1. BreakPoint 지정하기정지해서 보기를 원하는 지점을 클릭하여 지정해 줍니다. 2. 디버깅 시작하기우측 상단의 무당벌레를 클릭해 줍시다 경고창이 뜰 텐데, 그거 허용해 주면 이런 식으로 바뀝니다.중단점에 체크표시가 뜬 것을 확인하실 수 있는데, 체크표시가 뜨지 않는다면 해당지점에서는 디버깅이 불가능한 것이니다른 줄을 중단점으로 선택해 봅시다 이 상태로 게임을 실행시..
[C++/자료구조] 해싱(Hashing)과 해시 테이블(Hash Table)
·
C++/C++ Data Structure
A. 해싱(Hashing)이란?해싱은 방대한 양의 데이터를 고유한 숫자값(Hash Code)으로 변환하여, 원하는 데이터를 찾을 수 있게 해 줍니다.해싱은 크게 세 단계로 이루어집니다.키(Key) : 변환하기 전의 원본 데이터해시 함수 (Hash Function) : 키를 넣으면 특정 숫자(인덱스)로 바꿔주는 알고리즘해시값(Hash Value) : 해시 함수가 내뱉은 결과 숫자, 이 숫자를 기반으로 데이터가 저장될 위치를 결정합니다.B. 해시의 충돌위와 같은 방법으로 Key를 만들고, Key의 위치에 자료를 삽입할 수 있습니다.그러나 위와 같은 방법을 반복하면, 언젠가는 다른 값에서 동일한 Key를 생성할 수 있습니다.이렇게 서로 다른 원본에서 동일한 Key 값을 가지게 되는 것을 해시에서 '충돌'이 발..
[C++/자료구조] Array vs Vector vs List 비교
·
C++/C++ Data Structure
A. Array (정적 배열)가장 기본적인 배열입니다.생성할 때 크기를 결정하며, 중간에 크기를 바꿀 수 없습니다.메모리 : 메모리 영역에 연속적으로 할당됩니다. (지역 변수로 선언하면 일반적으로 스택에 생성됩니다.)특징 : 크기가 고정되어 있어 메모리 오버헤드가 거의 없고 속도가 가장 빠릅니다.#include #include int main() { // 크기 3의 정적 배열 선언 및 초기화 std::array arr = {10, 20, 30}; // 인덱스 접근 (매우 빠름) arr[1] = 25; for (int n : arr) { std::cout B. Vector (동적 배열)가장 많이 쓰이는 컨테이너이며, 크기가 가변적입니다.메모리 : 힙(Heap) 영..
[C++] 포인터 (Pointer)
·
C++/C++ Study
A. 포인터란?C++에서 포인터(Pointer)는 메모리의 주소값(Address)을 저장하는 변수입니다.일반적인 변수가 '값(데이터)'을 저장한다면, 포인터는 그 데이터가 메모리 어디에 있는지 위치를 가리킵니다.B. 핵심 연산자&(주소 연산자): 변수의 주소값을 알아낼 때 사용합니다.*(참조 연산자/역참조 연산자): 포인터가 가리키는 주소에 저장된 실제 값에 접근할 때 사용합니다.*는 사용 위치에 따라 의미가 달라집니다.int *ptr;에서는 ptr은 int형 데이터를 가리키는 포인터라는 의미입니다, 반면*ptr이는 ptr이 가리키는 주소의 실제 값에 접근하는 의미입니다. 간단한 코드 예시를 들어보겠습니다.int num = 10; // 일반 변수 선언int* ptr = # //..