[Unity, C#] SOLID 원칙
·
Unity,C#/Unity 정보
■ SOLID 원칙프로그래밍에서 널리 사용되는 디자인 패턴(Design Patterns)은 Gang of Four(GOF) 라 불리는 4명의 저자가 정리한 책에서 시작되었다. 디자인 패턴을 공부해본 사람이라면 알겠지만, 대부분의 책은 SOLID 원칙부터 소개하고, 대부분의 디자인 패턴 역시 이 SOLID 원칙을 준수하도록 설계되어 있다. ▶ SOLID 원칙Single responsibility : 단일 책임 원칙Open-closed : 개방-폐쇄 원칙Liskov substitution : 리스코프 치환 원칙Interface segregation : 인터페이스 분리 원칙Dependency inversion : 의존 역전 원칙위 5가지 원칙의 앞 글자를 따서 “SOLID” 원칙이라 부른다. 물론 실제 프로그..
[Unity] UI Toolkit 기본 사용법
·
Unity,C#/Unity 정보
■ UI ToolkitUI Toolkit은 Unity 2022.2 이후 유니티의 기존 UGUI(Canvas 기반 UI)를 대체할 수 있도록 개발된 새로운 공식 UI 시스템이다. 기존 UGUI는 GameObject 기반으로 동작하는 UI 시스템으로 드래그 앤 드롭을 통한 직관적인 UI 제작이 가능하다. 또한 하이어라키 구조와 Canvas의 SortOrder를 이용해 UI의 렌더링 순서를 제어할 수 있다.UGUI는 편리하고 직관적인 반면에 아래와 같은 뚜렷한 단점도 존재한다.구분단점 GameObject 기반 UGUI의 모든 UI요소는 GameObject + Component 로 구성된다. → 따라서 많은 UI요소가 있으면 UpdateLoop, Transform 갱신 등 CPU 오버헤드와메모리 사용량이 커..
[C#] 재귀호출(Recursive Call) / 팩토리얼, 피보나치, 하노이타워
·
Unity,C#/자료구조
■ 재귀호출(Recursive call)재귀 호출이란, 아래와 같이 함수 내에서 자기 자신을 다시 호출하는 것을 의미한다. 이렇게 함수 정의 내에서 자기 자신을 호출하는 코드가 들어있는 함수를 “재귀 함수(Recursive Function)”라 한다.using System;public class RecursiveTest{ public void Recursive() { Console.WriteLine("Recursive Call!"); // 자기 자신 호출 Recursive(); }}[재귀 함수]완료되지 않은 함수를 다시 호출한다는 것이 불가능해 보이지만, 사실 가능하다. 재귀 호출의 실행 흐름을 살펴보면 아래와 같다.함수 내에서 자기 자신을 호출하면 ..
[Unity] 쿼드트리(QuadTree) 공간분할 알고리즘
·
Unity,C#/알고리즘
■ 쿼드트리(QuadTree) 공간분할쿼드트리(QuadTree)는 공간을 효율적으로 관리하기 위한 트리 구조로, 하나의 노드가 4개의 자식 노드를 가지는 자료구조이다.→ 특정 조건(예 : 최소 크기, 포함된 객체 수)에 도달할 때까지 재귀적으로 공간을 4 분할한다. 플레이어(빨간색 박스)가 속한 노드의 객체만 활성화하여 불필요한 연산이 처리되지 않도록 구현하였다. 🛠️ 구현 방식1. 초기 공간 생성분할될 공간(루트 노드)을 하나의 사각형 영역으로 정의한다. 2. 분할 조건 검사본 구현에서는 노드 내부의 객체 수를 기준으로 분할 여부를 결정한다.노드 안의 객체 수가 설정한 최대 허용치보다 많으면 해당 영역을 4 등분하여 자식 노드를 생성한다.더 이상 분할할 필요가 없는 경우 리프 노드로 남긴다. 3. 객..
[Unity, C#] ScriptableObject - 스크립터블 오브젝트
·
Unity,C#/Unity 정보
■ ScriptableObject 스크립터블 오브젝트(Scriptable Object)는 유니티에서 제공하는 Mono와 다른 경량 데이터 컨테이너 클래스이다.말 그대로 스크립팅 가능한 Object, 즉 코드로 정의된 데이터 저장용 객체를 의미한다.스크립터블 오브젝트는 씬에 존재하지 않으며, 데이터를 독립적으로 저장하고 재사용 할 수 있는 “에셋 파일(.asset)”로 저장된 직렬화 가능한 데이터 객체이다.스크립터블 오브젝트는 다음과 같은 상황에서 사용된다.게임 내 설정값 관리.무기, 아이템, 능력치 등 고정된 데이터를 관리할 때.동일한 데이터를 여러 오브젝트가 공유해야 할 때.씬이 변경되어도 데이터가 유지되어야 할 때. ▼ 몬스터에 관련된 데이터 클래스를 만들 때, Monobehaviour와 Script..
[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(); ..
[Unity, C#] Editor - 커스텀 인스펙터
·
Unity,C#/Unity 정보
■ Editor - 커스텀 인스펙터 public class SizeController : MonoBehaviour{ // Do Something...}유니티에서 MonoBehaviour를 상속받는 스크립트는 게임 오브젝트에 부착할 수 있으며, 부착 시 모든 public 필드와 [SerializeField] 변수를 인스펙터에 자동으로 노출한다. 하지만 이러한 기본 기능 외에도, 버튼을 눌러 특정 함수를 실행하거나, 에디터 모드(Edit Mode)에서도 실시간으로 값을 반영하고 조작하고 싶을 때가 있다.이럴 때 CustomEditor를 사용하면 원하는 형태로 인스펙터를 자유롭게 커스터마이징 할 수 있다. 1. Custom Editor 생성public class SizeController : MonoBehav..
[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#] 병합 정렬(Merge Sort)
·
Unity,C#/알고리즘
■ 병합 정렬(Merge Sort)병합 정렬은 배열을 계속 쪼개고(Divide), 나눠진 배열들을 병합(Conquer)하면서 정렬하는 분할 정복(Divide and Conquer) 알고리즘이다.퀵 정렬이 피벗(Pivot)을 기준으로 배열을 좌우로 분할했다면, 병합 정렬은 배열의 가운데를 기준으로 반씩 나눈다.배열의 길이가 1이 될 때까지 재귀적으로 분해하고, 그 후 병합하면서 정렬한다. ■ 병합 정렬 구현(C#)1. 배열 분해// 병합 정렬public static void MergeSort(T[] arr, int left, int right){ if (left >= right) return; var mid = (left + right) / 2; MergeSort(arr, left, mid); Merg..