[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 ..