[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 오버헤드와메모리 사용량이 커..
[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처럼 간결한 방식으로 배열, 리스트, 컬렉션 등 다양한 데이터 소스를 간단하고 ..
[Unity] Coroutine(코루틴) 파헤치기
·
Unity,C#/Unity 정보
■ 동기(Synchronous)와 비동기(Asynchronous)동기와 비동기는 작업을 처리하는 방식의 차이를 나타내는 개념이다. 프로그래밍에서는 아래와 같은 의미로 사용된다.동기(Synchronous) : 작업이 순차적으로, 동일한 흐름 내에서 처리된다. 앞선 작업이 끝나야 다음이 실행된다.(일반적인 코드 실행 흐름.)OrderFood();Pay(); // => OrderFood()가 끝나야 실행.PrintReceipt(); // => Pay()가 끝나야 실행.비동기(Asynchronous) : 작업이 병렬적으로, 또는 다른 흐름에서 실행될 수 있다. 하나의 작업이 완료되기를 기다리지 않고, 그 사이 다른 작업이 함께 진행될 수 있다. public class Asynchronous ..