[C#] Object (Boxing & Unboxing)
·
C#
✍️ 개요 모든 .NET 클래스의 루트 상속 클래스는 항상 object입니다. 즉, 모든 클래스는 object에서 비롯되었다고 볼 수 있습니다. 오늘은 C# object 클래스가 무엇인지, 그리고 object가 제공하는 메서드가 무엇인지 Unity 예제를 통해 알아보도록 하겠습니다.  📌 Object란? Object:  .NET의 System.Object을 의미하며, C#의 모든 데이터 타입이 상속받는 클래스입니다. 간단한 예시를 통해 object에 대해 알아보도록 하겠습니다.  using System;// The Point class is derived from System.Object.class Point{ public int x, y; public Point(int x, int y) ..
[C#] 소개 및 특징
·
C#
✍️ 개요 최근 들어 블로그 포스팅의 주제가 난잡한 것 같아 주제를 명확하게 잡으려고 합니다. 그래서 금일부터 게임 프로그래밍의 필수 언어 중 하나인 C#에 대해 알아보도록 하겠습니다. 단순히 C# 문법만 살펴보는 것이 아닌, 게임 개발 엔진(Unity)와 함께 응용하면서 내용을 다뤄보도록 하겠습니다.  📌 C# 이란?  C#은 Microsoft에서 개발한 객체 지향 언어로, Java와 비슷한 구문과 구조를 가지고 있습니다. .NET 런타임(CLR)에서 실행되며, .NET 프레임워크에서 사용되는 언어입니다. 윈도우, 웹, 게임, 서버, 모바일, 클라우드, IoT 등 크로스 플랫폼 개발이 가능하기에 범용성이 매우 뛰어납니다. Unity 엔진에서 스크립트 작성을 위한 주력 언어로 C#을 사용하니 게임 개발..
[Unity] Model이 렌더링(Rendering)되는 과정 (1편)
·
유니티(Unity)/이론 정리
✍️ 개요 Unity에서 특정 Model을 이동시키는 로직을 구현해보셨나요? 언뜻 보기에는 모델 자체가 이동되는 것처럼 보입니다. 하지만 실제로는 Model을 구성하는 여러 정점(Vertices)들이 이동한 뒤 그래픽스 파이프라인 과정을 거쳐 화면에 출력되게 됩니다. 이 과정을 반복하여 Model이 이동되는 것처럼 보이는 것이죠. 오늘은 Model이 렌더링되는 과정이 어떻게 이루어지는지 살펴보도록 하겠습니다.  📌 3D Model이 렌더링 되는 과정 Unity에서는 어떻게 모델들을 화면에 출력시키는 걸까요? 만약 비행기가 날아다닌다면 3D Model을 구성하는 Mesh들이 실시간으로 이동하는 것처럼 보이겠죠? 지금부터 3D Model이 어떤 원리로 화면에 실시간으로 출력되는 지 알아보도록 하겠습니다. ..
[Unity] URP란 무엇인가?
·
유니티(Unity)/이론 정리
✍️ 개요 UPR(Universal Renderer Pipeline)은 현재 Unity에서 기본적으로 사용하는 렌더 파이프라인입니다. 최근에는 뛰어난 성능과 최적화로 모바일과 VR 플랫폼에서도 많이 사용하고 있습니다. 오늘은 URP의 개념과 동작 원리, 성능과 관련하여 내용을 정리하도록 하겠습니다.  📌 Unity Render Pipeline 의 역사 렌더 파이프라인(RP): 모델(데이터)를 화면에 출력하는 일련의 과정 과거 Unity는 Built-in이라는 RP를 사용했습니다. 하지만 Built-in RP는 한계가 명확했습니다.    첫번째 한계는 ① 최적화 기술 및 설계 부족 입니다.  위 사진처럼 광원(L)과 광원에 영향을 받는 오브젝트(N)이 있다면, 드로우콜(Draw Call)이 L * M이 ..
[Unity] 직렬화(Serialization)란 무엇인가?
·
유니티(Unity)/이론 정리
✍️ 개요Unity 개발에서 직렬화(Serialization) 라는 개념은 매우 중요합니다. 개발을 하면서 직렬화를 처음으로 접하는 경우는 [Serizable], [SerializedField] Attribute일 겁니다. 하지만 단순히 "이걸 추가했더니 이렇게 동작하구나"라는 접근 보다는 "이 기능이 어떤 원리로 동작하는가"에 대해 이해하는 것이 중요합니다. 그래서 직렬화에 대한 개념과 원리, 쓰임새에 대해 알아보도록 하겠습니다.  📌 직렬화(Serialization)란?  직렬화(Serialization): 객체를 저장하거나 파일로 전송하기 위해 객체를 바이트 스트림(Byte Stream)으로 변환하는 작업  반대로, 바이트 스트림을 객체로 변환하는 과정을 Deserialization이라고 합니다...
[Unity] Mono & IL2CPP 컴파일 방식의 차이
·
유니티(Unity)/이론 정리
Unity Engine은 두 가지 스크립팅 백엔드, Mono와 IL2CPP를 사용합니다.(스크립팅 백엔드: 스크립트를 컴파일 하는 방식 및 기술) 오늘은 Unity 컴파일 기술인 Mono와 IL2CPP가 어떻게 동작하는지, 그리고 어떤 원리와 특징이 있는지 살펴보겠습니다. Mono란? Mono: 런타임 시점에 요청 시 코드를 컴파일하는 JIT(Just-In-Time) 컴파일 방식 C#은 .NET 런타임 환경에서만 작동하기 때문에 IOS, Android에서는 작동하지 않습니다. 그래서 Unity는 Mono를 사용하여 여러 플랫폼에서 작동할 수 있도록 설계합니다.  💡 Mono가 작동하는 방식1. .NET에서 C#을 중간 언어인 IL(Intermediate Language)로 변환2. Mono에서 런타임으..
[Unity] .NET이란?
·
유니티(Unity)/이론 정리
Unity로 게임을 개발하다 보면.NET이라는 키워드를 종종 볼 수 있습니다. 오늘은 Unity에서 .NET이 어떤 기능을 제공하는지 살펴보도록 하겠습니다. .NET 의 개념과 역사 .NET: Microsoft에서 제작하였으며, 애플리케이션 개발에 필요한 라이브러리와 런타임 환경을 제공하는 무료 오픈소스 프레임워크 Unity에선 다중 플랫폼을 제공하기 위해 Mono를 사용하기 시작했습니다. Mono는 .NET 기반으로, 이때부터 Unity는 .NET 프로젝트를 진행하였습니다.    과거 .NET은 Standard, Core, XAMARIN으로 나뉘어져 있었습니다. 하지만 위 플랫폼들은 서로 다른 API를 지원했고, Microsoft는 모든 API를 하나로 통합하기 위해 .NET Standard를 출시하였..
[이론/C++] 이분 탐색 (Binary Search)
·
IT/알고리즘
이분 탐색(Binary Search)은 코딩 테스트에서 많이 등장하는 알고리즘 중 하나이다.탐색 알고리즘 중 가장 기본적인 알고리즘으로, 특정 값을 빠르게 찾는 로직이다.오늘은 이분 탐색에 대해 정리해보도록 하겠다. 이분 탐색이란? 이분 탐색(Binary Search): 정렬된 배열에서 탐색 범위를 절반씩 줄여나가면서 특정 값을 찾는 알고리즘 이분 탐색 알고리즘의 중요한 포인트는 정렬된 배열이 필요하다는 점이다.왜냐하면 이분 탐색은 데이터가 정렬되었다는 가정 하에 동작하기 때문이다. 그렇다면 이분 탐색의 알고리즘이 어떻게 동작하는지 살펴보도록 하자.   이분 탐색의 원리 이분 탐색을 하기 위해서는 left, right, mid 3개의 위치값이 필요하다.이분 탐색의 알고리즘은 다음과 같이 동작한다. ① 초..
[이론] 그리디(Greedy)
·
IT/알고리즘
그리디 알고리즘은 각 단계에서 그 순간이 최선이라고 생각하며 선택하는 방식이다.겉보기엔 간단하고 직관적이지만 항상 최적의 해를 보장하지는 않는다.이번 포스터에선 그리디 알고리즘의 개념과 특징, 그리고 예시를 통해 알아보도록 하겠다.  그리디 알고리즘이란 무엇인가 그리디(Greedy): 문제를 해결할 때 각 단계에서 가장 최선이라고 생각되는 선택을 함으로써 전체 해를 구하는 방식  그리디를 사용하는 이유 그리디 알고리즘을 사용하면 많은 이점이 있습니다.완전 탐색이 아닌, 최적의 해를 구하는 성질에 의한 경우만 탐색하면 되기 때문입니다.  구현이 간단하고 빠름그리디 알고리즘은 성질에 따라 로직을 구현하면 되기 때문에 다른 알고리즘보다 구현하기 쉽다.  계산 속도가 빠름전체 경우가 아닌, 이미 성질에 의해 정..
Unitask의 개념과 사용법
·
유니티(Unity)/이론 정리
최근에 게임을 협업하면서 Unitask를 통해 비동기 로직을 구현하는 상황을 보았다. 평소에 .NET 기반 Task을 통해 비동기 작업을 처리했는데, 협업을 통해 Unitask를 사용해보니 매력적인 라이브러리라고 생각했습니다. 그래서 오늘은 비동기 프로그래밍을 쉽게 처리해주는 Unitask에 대해 알아보도록 하겠습니다. Unitask 등장 ① Unity 코루틴(Coroutine)의 한계 코루틴은 IEnumerator를 사용해 중단과 실행을 반복하는 구조입니다. 하지만 이러한 구조는 복잡한 비동기 시스템에서 코드가 난잡해지고 가독성이 떨어집니다. 또한, 대량의 코루틴을 사용하면 많은 메모리 할당과 GC 문제로 성능 문제가 있습니다. GC가 자주 발생하는 이유: new WaitForSeconds 처럼 new..