코루틴(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개의 패턴이 존재하는데, 추후에 게임 개발에서 자주 사용되는 패턴에 대해 따로 정리하도록 하겠습니다...
클래스 이름 짓기 [ 2편 ] + MVC 패턴
·
유니티(Unity)/이론 정리
게임 개발을 하다 보면 클래스 명명을 어떻게 해야할 지 모를 때가 많습니다. 이번 2편에서는 다소 친숙한 클래스 이름들을 살펴보고, 각 이름들이 어떤 역할을 수행하는 지 알아보도록 하겠습니다. Manager Manager: 특정 시스템이나 여러 관련 기능을 책임지는 관리자 클래스 Manager는 특정 시스템이나 기능을 총괄하기 역할을 수행합니다. 보통 전역에서 접근 가능하게 설계되어(Singleton) 다양한 클래스나 시스템 간의 중재자 역할을 수행합니다. 예를 들어, Monster 클래스 내 Dead 함수에서 죽는 소리를 출력해야할 때, Monster는 SoundManager에게 죽는 소리를 요청하는 형태가 될 수 있습니다. 사용 예시GameManager: 게임의 주요 흐름을 관리하는 매니저입니다. 주..
[기능] GetComponent 최적화 (CachedMonobehaviour.cs)
·
유니티(Unity)/기능 구현
Unity 개발을 하다 보면 GetComponent를 빈번하게 사용하게 됩니다. 하지만 매번 호출할 때마다 성능 오버헤드가 발생한다는 사실을 알고 계신가요? 이번 포스팅에서는 GetComponent를 캐싱하여 최적화하는 방법과 그 중요성에 대해 다뤄보겠습니다. 캐싱(Caching)이란?캐싱: 자주 사용되는 데이터를 미리 저장해두고, 이후에 해당 데이터에 빠르게 접근할 수 있도록 하는 기술 캐싱은 성능을 크게 향싱시키는 중요한 최적화 기법 중 하나 특히 GetComponent와 같은 무거운 연산을 반복적으로 호출하는 상황에서 매우 유용함 이제 캐싱으로 GetCompoent를 최적화하는 방법을 살펴보자   CachedMonobehaviourusing System;using System.Collections...
클래스 이름 짓기 [ 1편 ]
·
유니티(Unity)/이론 정리
게임 개발을 하다 보면 객체의 역할에 따른 명명을 어떻게 해야할 지 모르는 경우가 많다. 협업 프로젝트를 열어 클래스들의 이름을 살펴보면, "Wrapper", "Dispatcher", "Helper", "Manager"로 끝나는 클래스들이 있을 수 있다. 이러한 클래스들은 어떤 역할을 하는지, 그리고 협업을 위해서 어떻게 명명하면 좋은지 알아보도록 하자.생각보다 내용이 길어질 것 같아 편을 나눠서 작성하겠습니다. Wrapper Wrapper: 라이브러리나 API의 인터페이스를 단순화, 혹은 복잡한 시스템을 캡슐화하는 클래스 Wrapper 용어는 "감싸다(Wrap)"라는 의미를 가지고 있다. 즉, 이미 존재하던 Original에 새로운 필드나 메소드, 이벤트 처리, 에러 감지 등 새로운 시스템을 추가하여 ..
에셋 번들(Asset Bundle) 이론 정리
·
유니티(Unity)/이론 정리
Unity 에셋 번들은 게임의 리소스를 효율적으로 관리하고 최적화하는 데 중요한 역할을 한다. 특정 리소스를 에셋 번들로 묶어 필요할 때만 다운로드하고 로드함으로써 메모리 사용을 줄이고 게임 로딩 속도를 개선할 수 있다. 현업에서 중요한 기술 중 하나이므로 에셋 번들에 대해 알아보도록 하겠다. 에셋 번들(Asset Bundle)이란? 에셋 번들: 여러 에셋들을 하나로 묶어 주는 파일 포맷 유명한 모바일 게임들을 다운해본 적이 있는가?이때 바로 플레이가 가능하지 않고 패치가 시작된다.그 이유는 에셋 번들을 다운로드하기 때문이다. 에셋 번들 없이 게임을 빌드한다면?게임 용량이 엄청 커지고, 에셋이 변경될 때마다 매번 에셋 전체를 다운받아야 해서 비효율적이다.그래서 모바일 게임은 에셋 번들이 필수이다.   에..
싱글톤(Singleton) 패턴
·
유니티(Unity)/이론 정리
싱글톤 패턴이란?싱글톤 패턴: 특정 클래스의 인스턴스가 단 하나만 생성되는 것을 보장하는 디자인 패턴 Player 및 Monster 같은 경우 여러 개의 인스턴스가 존재할 수 있으니 싱글톤의 대상이 아니다.GM(GameManager) 인스턴스는 씬에서 단 하나만 존재하기 때문에 싱글톤의 대상이다. 아직 감이 오지 않는다면 예를 더 들어보겠다.어떤 게임에 Stage 클래스와 StageManager 클래스가 있다고 가정하자.이때, Stage는 스테이지 데이터 및 행동 관리 클래스이며 StageManager는 Stage를 관리하는 클래스이다.Stage는 게임에 여러 개로 존재할 수 있으므로 싱글톤 패턴을 적용할 수 없다.하지만 StageManager가 10개의 Stage를 관리하는 클래스이며 단 하나만 존재하..
GetComponent 성능
·
유니티(Unity)/이론 정리
Unity를 개발하다보면 잦은 GetComponent 호출은 성능을 크게 떨어뜨린다는 말을 자주 듣습니다. '그렇다면 GetComponent는 얼마나 느릴까요?' 오늘은 이 궁금증을 해결하기 위해 실험을 준비했습니다 :) GetComponent 성능 실험 실험 구성은 다음과 같다. 1. Unity 빈 프로젝트 환경 구성2. 단순 연산을 N번 돌렸을 때, 1ms가 나오는 N을 선택3. Update 함수에서 N번의 GetCompoent 돌려서 성능 체크 바로 시작해보자.  Scene에는 카메라, 직사광선, 그리고 테스트용 스크립트가 있음 테스트용 스크립트에는 특정 액션의 수행 시간을 체크하는 메서드를 보유함 public void MeasurePerformance(Action action, int loopCo..