[Unity, C#] EditorWindow - 커스텀 에디터 윈도우
·
Unity,C#/Unity 정보
■ EditorWindow - 커스텀 윈도우 CustomEditor를 통해 기존 컴포넌트의 인스펙터를 꾸민다면, Custom Editor Window는 Unity 상단 메뉴에서 열 수 있는 독립적인 창을 만들 수 있다.툴 제작, 데이터 편집 등 전용 유틸리티를 만들 때 유용하다. ■ EditorWindow 생성using UnityEditor;using UnityEngine;public class CustomWindowTest : EditorWindow{ [MenuItem("Tools/Window Test", validate = false, priority = 100)] private static void Init() { var window = GetWindow(); ..
[C#] LINQ(Language Integrated Query)
·
Unity,C#/Unity 정보
■ LINQ(Language Integrated Query)LINQ는 Language INtegrated Query의 약어로, C# 언어에 통합된 데이터 질의 기능을 말한다.여기서 “질의(Query)”란 말 그대로 무언가를 묻는 행위를 뜻하며, “데이터 질의”는 데이터에 대해 물어보고 필요한 값을 찾는 과정을 말한다.이러한 질의에는 다음과 같은 요소가 포함된다.From : 어떤 데이터 집합에서 찾을 것인가?Where : 어떤 값의 데이터를 찾을 것인가?Select : 어떤 항목을 추출할 것인가? LINQ는 원래 데이터베이스(SQL)에서 데이터를 조회할 때 사용하던 쿼리 형식에서 영감을 받아 설계된 C# 전용 문법이다.→ SQL처럼 간결한 방식으로 배열, 리스트, 컬렉션 등 다양한 데이터 소스를 간단하고 ..
[정렬 알고리즘, C#] 퀵 정렬(Quick Sort) - Hoare, Lomuto 분할 방식
·
Unity,C#/알고리즘
■ 퀵 정렬(Quick Sort)퀵 정렬은 기준값(Pivot)을 하나 선택한 뒤, 그보다 작은 값은 왼쪽, 큰 값은 오른쪽으로 보내며 배열을 분할하고, 각 부분을 재귀적으로 다시 정렬하는 알고리즘이다.퀵 정렬의 핵심 원리는 다음과 같다.Pivot(기준값)을 하나 정한다.배열을 pivot보다 작은 부분과 큰 부분으로 나눈다.이 두 부분을 재귀적으로 다시 퀵 정렬한다.이처럼 퀵 정렬은 분할(Divide) → 정복(Conquer) → 결합(Combine)의 순서를 따르는 전형적인 분할 정복(Divide and Conquer) 알고리즘이다.조금 복잡해 보일 수 있지만, pivot을 기준으로 어떻게 분할되고, 재귀가 어디까지 이어지는지만 이해하면 직접 구현하는 데에도 큰 어려움이 없다. ■ 퀵 정렬 구현 - Ho..
[정렬 알고리즘, C#] 버블 정렬(Bubble Sort)
·
Unity,C#/알고리즘
■ 버블 정렬(Bubble Sort)버블 정렬이란 이름은 큰 값이 뒤로 떠오르는 모습이 마치 물속에서 거품(버블)이 위로 올라가는 것처럼 보인다는 데서 유래된 이름이다.버블 정렬은 인접한 두 개의 원소를 비교하는 방식으로 정렬을 수행한다. 현재 탐색 중인 요소의 인덱스 번호를 $n$이라 한다면,arr[n] > arr[n+1] 이라면, 두 원소의 값을 서로 교환한다. (오름차순 정렬 기준)위 비교는 “$n + 1 만족하는 동안 반복된다.즉, 첫 번째 반복이 끝나면 배열에서 가장 큰 값이 맨 뒤에 위치하게 된다. 두 번째 반복이 끝나면 두 번째로 큰 값이 그 앞자리에 위치하게 된다.이렇게 반복이 진행될수록 가장 큰 값이 점차 뒤쪽으로 이동하게 되는 알고리즘이다. ■ 버블 정렬 구현(C#)버블 정렬의 구현 ..
[C#] 자료구조(Data Structure)와 시간복잡도
·
Unity,C#/자료구조
■ 자료구조(Data structure)자료(data)를 효율적으로 저장하고, 효율적으로 접근하고, 관리하기 위한 구조(structure)이다.프로그래밍에서 “데이터”는 언제나 핵심이다. 이 데이터를 어떻게 저장할지, 꺼낼지, 정렬할지, 검색할지가 프로그램의 성능을 좌우한다.자료구조는 이러한 것을 잘할 수 있도록 도와주는 “틀”이다.넓은 의미에서 int 변수처럼 단순한 데이터 저장도 자료구조에 포함되며, 구조체(struct), 배열(array) 그리고 파일이 데이터를 저장하는 방식까지 모두 자료구조의 한 형태로 볼 수 있다.이름특징선형(Linear) 구조 각 요소가 일렬로 나열되며, 한 요소 다음에 오직 하나의 요소만 존재할 수 있는 구조. (예 : 리스트, 배열, 스택, 큐 등..)비선형(Non-Lin..
[C#, Unity, 절차적 생성] 절차적 지형 생성 - 1.PerlinNoise
·
Unity,C#/절차적생성(PCG)
■ PerlinNoise PerlinNoise는 1983년 Ken Perlin이 개발한 그래디언트 기반의 노이즈(Gradient Noise)함수로, 지형의 절차적 생성, 텍스처 생성, 구름이나 연기 같은 자연 현상 표현 등 다양한 절차적 콘텐츠 생성에 활용된다. 1. Noise함수 Noise함수는 입력값에 따라 “의사 난수(Pseudo-random)”값을 반환하는 함수다. 일반적인 난수와 달리, 입력값이 비슷할수록 결과값도 유사해지는 부드러운 변화를 가진다.// 호출할 때마다 완전히 다른 값.Random.Range(0f, 1f);// 항상 같은 입력에 같은 결과.Mathf.PerlinNoise(x, y);// 입력이 조금 달라지면, 출력도 조금만 변화 -> 부드러운 노이즈Mathf.PerlinNoise..
[C#, Unity, 최단경로(PathFinding)] TileMap A* 알고리즘
·
Unity,C#/알고리즘
■ A* 알고리즘“BFS에서 발전한 알고리즘이 다익스트라라면, 다익스트라에서 한 단계 더 발전한 것이 바로 A 알고리즘이다.” 다익스트라와 동작 방식은 비슷하지만, 목표 노드(n)까지의 거리 측정값인 휴리스틱(Heuristic)을 추가로 사용한다. 각 타일에는 다음과 같은 정보가 저장된다. 이름설명 g(n) 현재 노드까지의 누적 비용. 가중치가 없다면 상하좌우 이동은 10(또는 1), 대각선 이동은 14(또는 1.4)로 계산한다. h(n) 목표 지점까지의 예상 비용(휴리스틱). 맨해튼 거리 방식이나 정수 근사 휴리스틱(10/14)을 사용해 계산한다. f(n) g(n) + h(n). A* 알고리즘에서 우선순위를 결정할 때 사용하는 총 비용. 다익스트라에서는 우선순위 큐의 기준이 g(n) 값(누적..
[C#, Unity, 최단경로(PathFinding)] TileMap 다익스트라(Dijkstra) 알고리즘
·
Unity,C#/알고리즘
■ 다익스트라(Dijkstra) 알고리즘다익스트라 알고리즘은 가중치 있는 그래프에서 시작 노드부터 다른 노드들까지의 최단 경로를 찾는다.시작 노드로부터 모든 노드에 대한 최단 경로를 계산한다.가중치는 음수일 수 없다.다익스트라는 그라디(Greedy) 알고리즘이며, 동적 배열 갱신 과정에서 다이내믹 프로그래밍의 성격도 일부 포함된다그라디 알고리즘과 다이나믹 프로그래밍에 대해 정리한 부분은 아래에서 참조할 수 있다. ▼ 그라디 알고리즘2025.04.10 - [Unity,C#/알고리즘] - [C#, Algorithm] 그라디(탐욕, 욕심쟁이) 알고리즘 [C#, Algorithm] 그라디(탐욕, 욕심쟁이) 알고리즘■ 그라디(Greedy) 알고리즘그라디(탐욕, 욕심쟁이) 알고리즘은 매 단계에서 “가장 좋아 보이는..
[C#, Algorithm] Dynamic Programming(동적 계획법)
·
Unity,C#/알고리즘
■ Dynamic Programming(동적 계획법)큰 문제를 작은 문제로 나누고, 그 작은 문제의 결과를 저장하여 같은 계산을 반복하지 않도록 하는 알고리즘 기법이다.중복 부분 문제 (Overlapping Subproblems)동일한 부분 문제를 여러 번 계산하게 되는 구조.최적 부분 구조(Optimal Substructure)문제의 최적해가 부분 문제의 최적해로 구성될 수 있다.기법특징 재귀 모든 경우를 완전 탐색. 그라디 항상 가장 좋아 보이는 선택을 한다. 최적해를 보장하지 않을 수 있다. DP 중복 계산을 피하며 모든 경우를 고려. 항상 최적해를 구한다.  DP에는 크게 2가지 구현 방식이 있다. 이 구현 방식을 피보나치 수열을 구하는 문제를 통해 알아보자. 1. Top-Down 방식p..