[Unity 이론] 중복 없는 랜덤 요소 뽑기 (HashSet vs List 성능 분석)
·
유니티(Unity)/이론 정리
📌 개요  Unity에서 게임을 만들다보면 특정 리스트에서 중복 없이 랜덤 요소를 뽑는 기능이 자주 필요하곤 합니다. 아마 대부분은 다음과 같은 방법으로 로직을 작성할거라 생각합니다.List 중복 체크 방법List 중복 제거 방법HashSet 자료구조 활용      결론부터 말하자면... (일반적으로) HashSet 자료구조를 사용하는게 좋습니다.   [ HashSet 을 활용한 코드 보기 ]  private List GetNotDuplicateRandomList_HashSet(IList list, int count) { HashSet hashSet = new HashSet(list); List uniqueList = hashSet.To..
[Unity] 카메라와 컬링
·
유니티(Unity)/이론 정리
✍️ 개요   [ Model이 렌더링(Rendering)되는 과정 (1편) ] [Unity] Model이 렌더링(Rendering)되는 과정 (1편)✍️ 개요 Unity에서 특정 Model을 이동시키는 로직을 구현해보셨나요? 언뜻 보기에는 모델 자체가 이동되는 것처럼 보입니다. 하지만 실제로는 Model을 구성하는 여러 정점(Vertices)들이 이동한 뒤gus6615.tistory.com 이전에 Model을 렌더링하기 위해 CPU는 Draw Call을 통해 GPU로 렌더링에 필요한 정보인 Mesh, Material, Texture, Shader, DP Call을 전송한다는 것을 확인했습니다. 여기서 GPU는 가장 먼저 Mesh을 구성하는 정점들의 좌표계를 로컬 -> 월드 -> 뷰 -> 투영 -> 클립 ..
[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를 출시하였..
Unitask의 개념과 사용법
·
유니티(Unity)/이론 정리
최근에 게임을 협업하면서 Unitask를 통해 비동기 로직을 구현하는 상황을 보았다. 평소에 .NET 기반 Task을 통해 비동기 작업을 처리했는데, 협업을 통해 Unitask를 사용해보니 매력적인 라이브러리라고 생각했습니다. 그래서 오늘은 비동기 프로그래밍을 쉽게 처리해주는 Unitask에 대해 알아보도록 하겠습니다. Unitask 등장 ① Unity 코루틴(Coroutine)의 한계 코루틴은 IEnumerator를 사용해 중단과 실행을 반복하는 구조입니다. 하지만 이러한 구조는 복잡한 비동기 시스템에서 코드가 난잡해지고 가독성이 떨어집니다. 또한, 대량의 코루틴을 사용하면 많은 메모리 할당과 GC 문제로 성능 문제가 있습니다. GC가 자주 발생하는 이유: new WaitForSeconds 처럼 new..
코루틴(Coroutine)의 개념과 동작 원리
·
유니티(Unity)/이론 정리
Unity에서 사용하는 코루틴(Coroutine)은 코드의 흐름을 제어할 수 있도록 해주는 기능입니다. 코루틴을 사용하면 특정 이벤트가 발생하거나 시간이 경과한 뒤에 실행될 작업을 손쉽게 처리할 수 있습니다. 오늘은 이 코루틴에 대한 개념과 원리에 대해 자세히 알아보도록 하겠습니다. 코루틴(Coroutine)이란? 함수를 호출하면 시작과 끝이 1 프레임 안에 수행됩니다. 하지만 게임을 개발하다 보면 특정 로직이 몇 프레임(혹은 몇 초) 동안 수행되어야 하는 순간들이 많습니다. 그래서 코루틴이라는 새로운 개념이 나타나게 되었습니다. 코루틴: 특정 작업(Task)를 다수의 프레임으로 분산시킬 수 있는 실행 기능"Coroutine"은 "Co"와 "Routine"이 합쳐진 말로, 루틴(함수)들이 서로 협력하면서..
[Unity Korea] 객체 지향 설계 원칙 (SOLID)
·
유니티(Unity)/이론 정리
게임 시스템을 설계하기 위해선 유지보수성과 확장성이 좋은 코드를 작성하는 것이 중요합니다. 이를 위해 객체 지향 설계 원칙인 SOLID 원칙을 따르면 코드 구조를 더 명확하고 효율적으로 설계할 수 있습니다. 이번 포스트에서는 SOLID 원칙이 무엇인지, Unity Korea 채널을 통해 정리하고 관련 정보를 알아보겠습니다. GoF & SOLID GoF: "Gang of Four"의 약자로, 디자인 패턴에서 중요한 역할을 수행한 4명의 개발자를 의미합니다. 이들은 객체 지향 소프트웨어 설계를 체계화하여 디자인 패턴을 정리하였으며, 디자인 패턴은 크게 생성 패턴, 구조 패턴, 행동 패턴으로 나뉩니다. 총 23개의 패턴이 존재하는데, 추후에 게임 개발에서 자주 사용되는 패턴에 대해 따로 정리하도록 하겠습니다...