데이터를 다룰 때 종종 중복된 값이 문제를 일으키곤 합니다. LINQ에서 제공하는 Distinct() 메서드는 이러한 중복을 쉽게 제거해줍니다. Distinct()의 사용법과 다양한 활용 예제를 살펴보겠습니다.Distinct()란?Distinct()는 컬렉션 내의 중복된 요소를 제거하고 고유한 요소만 반환하는 LINQ 메서드입니다.using System;using System.Linq;using System.Collections.Generic;class Program{ static void Main() { var numbers = new List { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 }; var uniqueNumbers = numbers.Distinc..
StateMachineBehaviour란?StateMachineBehaviour는 특정 State에 진입하자마자, 혹은 빠져나가기 직전 등 각 State의 상황에 따라 어떠한 코드를 자동으로 실행할 수 있도록 도와주는 스크립트입니다. StateMachineBehaviour는 State 입·출력, 업데이트 이벤트 등 다양한 콜백을 제공합니다. OnStateEnter, OnStateUpdate, OnStateExit 등은 물론, Transition시점에 호출되는 이벤트도 다룹니다.더보기🔽Animator란?Unity의 Animator는 State단위로 움직임을 정의합니다. “(Transition) Condition”과 “Animation Clip”을 활용하여 각 State를 서로 연결합니다. StateM..
C#은 null 참조 에러(null reference exception)를 방지하기 위해 널 허용 참조 타입(nullable reference type)을 도입했습니다. 이에 따라, 컴파일러는 변수가 널(null)일 가능성이 있는 경우 경고를 표시합니다. 하지만 개발자가 변수가 절대로 널이 아님을 확신하는 경우, 컴파일러의 경고를 무시하고 이를 명시적으로 나타내기 위해 널 허용 연산자(null-forgiving operator, !)를 사용할 수 있습니다.널 허용 연산자란?널 허용 연산자(!)는 C#에서 널 검사 경고를 억제하는 연산자입니다. 이를 통해 컴파일러가 "이 변수는 널일 수도 있다"고 경고하는 상황을 개발자가 강제로 무시할 수 있습니다.string? nullableString = null;//..
프로그래밍할 때 종종 사용하는 용어 중 TearDown과 Dirty는 맥락에 따라 다른 의미로 쓰이지만, 각각의 개념은 개발 과정에서 중요합니다. 이번 글에서는 이 두 용어의 의미와 사용 예를 정리해보겠습니다.TearDownTearDown은 설정된 상태를 초기화하거나 제거하는 과정을 의미합니다. 이는 특정 작업이 완료된 후 남아 있는 자원을 정리하거나, 테스트 환경을 원래 상태로 복구하는 데 사용됩니다.예시Unity의 Test Framework에서 TearDown은 테스트가 끝난 후 실행되는 메서드입니다. 테스트 중 생성된 오브젝트나 데이터를 정리해, 다음 테스트가 영향을 받지 않도록 해줍니다.using UnityEngine;using UnityEngine.TestTools;using NUnit.Fram..
게임 개발을 하다 보면, 배열(혹은 리스트)의 데이터를 복사해야 할 때가 종종 있습니다.그런데 C#에서 배열은 참조 타입이라 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)가 존재하여 사용할 때 혼동될 수 있습니다. Unity 프로젝트에서 발생할 수 있는 사례로 알아보겠습니다. 얕은 복사(Shallow Copy)란?“원본과 같은 데이터를 가리키는 참조만 복사한다.”즉, 배열 변수가 가리키는 메모리 주소(참조)만 복사하는 방식입니다. 원본 배열과 복사본 배열은 동일한 실체(데이터)를 공유하므로, 한쪽을 변경하면 다른 쪽에도 영향이 갑니다.void Start(){ int[] originalArray = { 1, 2, 3, 4 }; int[] shallowCopy = origin..
TextMeshPro컴포넌트에는는 Text를 더 세밀하게 제어할 수 여러가지 옵션들이 존재합니다.그 중, 텍스트의 Style을 이용하면 코딩없이 Lowercase, Uppercase를 선택할 수 있습니다.
Facade 패턴은 복잡한 시스템을 단순화하여 쉽게 사용할 수 있도록 하는 디자인 패턴입니다. 위 사진처럼 거대한 건물 뒤에 부분은 보이지 않는 것처럼, 퍼사드 패턴을 통해 뒤에서 일어나는 것들이 무엇이 있는지 알 필요 없이 사용하기 쉽게 만드는데 초점을 두는 패턴이라고생각하시면 됩니다. Facade 패턴의 개념Facade 패턴은 복잡한 서브시스템들을 단순화하여, 클라이언트가 하나의 인터페이스만으로 시스템을 조작할 수 있게 해줍니다. 여러 객체와 클래스들이 상호작용하여 시스템이 구성될 때, Facade 클래스가 이를 조정하여 하나의 간단한 API로 제공합니다. 퍼사드 패턴은 다음과 같은 경우에 사용하면 좋습니다. 복잡한 코드 구조를 숨기고 간단한 인터페이스를 제공하고자 할 때클라이언트 코드가..
Adapter 패턴은 서로 호환되지 않는 인터페이스를 가진 클래스들을 연결하는 데 유용한 디자인 패턴입니다. 즉, 기존 클래스와 새로운 클래스 간의 호환성을 확보하는 역할을 하며, 코드 수정 없이도 기존 코드를 새로운 방식으로 사용할 수 있도록 도와줍니다.Adapter 패턴의 개념Adapter 패턴은 두 가지 주요 컴포넌트로 구성됩니다.Target: 클라이언트가 기대하는 인터페이스Adaptee: 기존에 존재하며 새로 요구되는 인터페이스와 호환되지 않는 클래스Adapter: Target 인터페이스를 구현하여 Adaptee 클래스를 래핑하는 클래스유니티에서는 외부 API 또는 기존 시스템 코드와 호환이 되지 않는 상황에서 Adapter 패턴을 사용할 수 있습니다.외부 데이터 API와의 호환성 문제 해결예를 ..
유니티 팩토리패턴에 대해 알아보자! #Factory 패턴유니티 팩토리 패턴에 대해서 #UML 작성해보기팩토리 패턴은 객체 생성을 담당하는 팩토리 클래스를 도입하여 객체 생성 로직을 캡슐화하는 디자인 패턴입니다. 팩토리 패턴을 사용하면 객체wlsdn629.tistory.com바로 저번 포스팅에 팩토리패턴에 대해서 글을 써봤습니다.오늘은 저번 시간에 이어 조금 더 나아간 추상 팩토리에 대해서 알아보겠습니다. 기본 팩토리 패턴과 추상 팩토리 패턴의 차이기본 팩토리 패턴(Factory Method)과 추상 팩토리 패턴(Abstract Factory)은 모두 객체 생성과 관련된 디자인 패턴이지만, 사용하는 방식과 목적에서 차이가 있습니다. 각각의 패턴은 객체를 생성하는 역할을 담당하지만, 추상화의 수준과 용도가..
두고두고 써먹는 싱글톤(SingleTon) 코드싱글톤 패턴이란? Unity 싱글톤 패턴은 특정 클래스가 게임 수명 기간 동안 하나의 인스턴스만 갖도록 하기 위해 Unity 게임 개발에서 일반적으로 사용되는 디자인 패턴입니다. 이 패턴은 게임 내wlsdn629.tistory.com예전에도 싱글톤관련해서 블로그 포스팅을 작성한 적이 있습니다. 이번시간에는 싱글톤 패턴의 종류에는 무엇이 있는지 한 번 알아보겠습니다.기본 싱글톤 패턴 (No MonoBehaviour)public class GameManager{ private static GameManager instance; public static GameManager Instance { get { ..
gameObject.activeSelf란? 해당 GameObject가 현재 활성 상태인지 여부를 확인할 수 있는 프로퍼티입니다. activeSelf는 해당 GameObject 자신이 활성화(active)되어 있는지 여부를 나타내지만 부모 GameObject의 활성화 여부에는 영향을 받지 않습니다. 즉, 부모가 비활성화되더라도 자식 GameObject가 활성화되어 있다면 activeSelf는 여전히 true일 수 있습니다. GameObject가 실제로 장면에서 활성화되어 있는지 여부는 gameObject.activeInHierarchy를 사용하여 확인할 수 있습니다.
Canvas 컴포넌트를 보면 가끔 Vertex Color Always In Gamma경고를 보실 수 있습니다.옵션을 활성화하지 않으면 감마 색상 공간에서 선형 색상 공간으로 변환이 일어나지 않아, UI 쉐이더에서 색상 정확도가 떨어질 수 있다는 경고입니다. 색상의 정확도가 중요한 UI를 만들 때, 이 옵션을 활성화하는 것이 권장된다고 합니다. 한 마디로 해당 옵션을 활성화하면 Gamma Space에서 Linear Space로 변환이 이루어진다고 합니다.
패턴 매칭이란?패턴 매칭(Pattern Matching)은 변수나 객체의 데이터 형식, 구조, 값을 검사하고 조건을 만족할 경우 특정 동작을 수행하는 방법입니다. 패턴 매칭을 사용하면 객체나 값이 특정 조건에 맞는지 쉽게 확인할 수 있습니다. 패턴 매칭은 주로 if문이나 switch문에서 많이 사용됩니다. Property Pattern이란?Property Pattern은 C# 8.0에서 도입된 패턴 매칭의 한 종류로, 객체의 속성(Property)이나 필드(Field)가 특정 조건을 만족하는지 확인하는 데 사용됩니다. 객체의 속성 값이 null인지 아닌지, 특정 값인지를 쉽게 검사할 수 있습니다. 다음은 예제 코드입니다.private void UpdateCrownPos(){ // TreasureU..
나는 문뜩 궁금해졌다. SRP Batch는 같은 Shader를 공유하는 메테리얼을 사용하면 드로우콜 비용이 줄어든다는 것 알게 된 이후 그렇다면 왜 굳이 Texture Altas를 사용하는 것인지? 너무 궁금해졌다. 왜냐하면 어차피 같은 Shader를 사용하면 다른 메테리얼 사용해도 SRP Batch덕분에 드로우콜 비용이 줄어드니깐 Texture Atlas를 사용해서 굳이 메테리얼을 하나로 만들어서 사용할 필요가 있을까? 야이 바보야 메테리얼 하나당 드로우콜 하나가 발생하는거잖아! 어느 정도 맞는말이다. Draw Call이란 것은 DP Call + Render State인데 DP Call은 무시하고 다른 메테리얼을 사용한다는 것은 다른 Render State를 사용한다는 것이므로, 같은 Shader를 사..
Spline이란?Spline은 곡선을 나타내기 위한 수학적 표현으로, 객체를 경로를 따라 이동시킬 때 사용됩니다. 스플라인의 기본 개념은 여러 제어점(Control Points)을 이용해 곡선을 만들어 내고, 곡선을 따라 객체가 움직이도록 하는 것입니다. 곡선은 정규화 값(normalized value), 즉 0에서 1까지의 값을 사용해 스플라인 상의 특정 위치를 계산할 수 있습니다. 정규화 값이 0이면 스플라인의 시작점, 1이면 끝점을 나타냅니다. Spline의 특정 위치를 계산하기public Vector3 GetPositionOnSpline(int splineIndex, float normalizedPosition){ //spline Index : 얻고자 하는 Spline if (splineIn..