본문 바로가기

Study/Unity Engine

[Unity] Profiling Unity ProfilingUnity Profiler는 게임 성능을 분석하고 최적화하기 위한 도구다. 주로 CPU, GPU, 메모리, 렌더링 성능 등을 분석한다.여기에서 플레이 모드를 활성화하면 Profiler 창에 성능 데이터가 표시된다. 주요 프로파일링 카테고리는 다음과 같이 볼 수 있다.CPU Usage함수 호출 시간과 CPU 사용량을 분석.스크립트에서 가장 많이 사용된 메서드나 코루틴을 확인 가능.GPU UsageGPU 렌더링 관련 데이터 분석.렌더링 시간이 높은 쉐이더나 오브젝트를 확인.Memory메모리 사용량 및 할당 정보를 확인.가비지 컬렉션(Heap Allocations) 문제 파악.Rendering드로우 콜, 배치 수 및 오브젝트 렌더링 최적화.Physics물리 시뮬레이션 시간 분석.복잡.. 더보기
[Unity] DLL과 PDB 언리얼 엔진 그리고 유니티 엔진을 사용해서 게임 프로그래밍을 할 때, 가장 길게 느껴지는 시간은 아무래도 컴파일 시간이다.물론, 코딩을 잘해서 머릿속으로 코드를 돌려보고 작동까지 볼 수 있는 실력이 된다면 괜찮겠지만 안타깝게도 아직 그정도 수준까지는 멀었다.이번에는 유니티에서 이러한 컴파일 시간을 줄여보는 방법에 대해 공부해보았다.우선 DLL 파일과 PDB 파일에 대해 알아야한다.1. DLL;Dynamic Link Library라이브러리란, 컴퓨터 프로그램에서 사용하는 비휘발성 자원(함수, 데이터, 타입 등)의 모임을 뜻한다.DLL은 동적으로 링크되고 실행되는 재사용 가능한 코드 모듈을 의미한다. 즉, 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함하는 라이브러리이다. 그리고 유니티에서 D.. 더보기
[Unity] 컴파일 과정 유니티의 스크립트와 스크립트 외의 다른 리소스들의 컴파일 과정을 살펴보자.스크립트1. 스크립트 분류Asset 폴더 내 스크립트를 Assembly Definition Files (.asmdef)와 디렉토리 구조에 따라 그룹화한다.예를 들어, Assets/Scripts에 있는 스크립트는 기본적으로 Assembly-CSharp.dll이라는 하나의 DLL로 컴파일 된다.2. 컴파일유니티는 Roslyn 컴파일러를 사용하여 C# 코드를 DLL 파일로 변환한다.3. 출력이렇게 생성된 DLL 파일은 Project 폴더의 Library/ScriptAssemblies 폴더에 저장된다.Assembly-CSharp.dll: 사용자가 작성한 대부분의 스크립트가 포함된 메인 DLL.Assembly-CSharp-Editor.dll.. 더보기
[Unity] 오브젝트 검색 방법 https://waterglass0105.tistory.com/110 [Unity] TagUnity에서 Tag는 게임 오브젝트를 식별하고 분류하기 위한 문자열 라벨이다. Tag를 사용하면 특정 오브젝트 그룹에 쉽게 접근하거나 필터링할 수 있다.예를 들어, 적 오브젝트는 "Enemy" 태그를, 플레waterglass0105.tistory.com Tag 내용을 정리하면서, 지나친 Tag 사용, 잦은 Tag 기반 검색이 시스템에 좋지 않은 영향을 줄 수 있다고 언급하며 다른 검색 방법에 대해 소개한 바 있다. 이번에는 FindWithTag나 FindGameObjectsWithTag 대신 사용할 수 있는 대체 검색 방법들에 대해 알아보고자 한다. 1. Layer 기반 검색https://waterglass0105.. 더보기
[Unity] ScriptableObject Unity를 이용한 카드게임 개발과정을 보면, 거의 대부분이 사용하는 것이 바로 'Scriptable Object'다. Scriptable Object는 게임 개발에서 데이터 중심 설계를 지원하기 위해 제공되는 특별한 유형의 객체다. 일반적으로 MonoBehaviour와 함께 사용되는 게임 객체와 달리, ScriptableObject는 데이터 저장을 주 목적으로 하며 메모리 및 성능 최적화를 위해 설계되었다.즉, ScriptableObject를 사용하면 데이터를 효율적으로 관리하고, 복잡한 데이터 구조를 공유하거나 독립적으로 유지할 수 있다. 현재 객체지향에서 지향하는 디자인 패턴은 로직의 분리에 초점을 두고 있다.https://waterglass0105.tistory.com/112 MVC / MVVM .. 더보기
[Unity] Layer https://docs.unity3d.com/kr/560/Manual/Layers.html 레이어 - Unity 매뉴얼레이어(Layers) 는 카메라 가 씬의 일부만 렌더링하고 광원 이 씬의 일부만 비추기 위해 가장 많이 사용됩니다. 그 외에도 콜라이더를 선별적으로 무시하거나 충돌을 생성하기 위해 레이캐스팅에docs.unity3d.com  Unity의 Layer는 게임 오브젝트를 그룹화하여 특정 작업이나 연산에 대해 선택적으로 처리할 수 있도록 하는 기능이다.Layer는 보통 물리 연산, 카메라 렌더링, 레이캐스트, 컬링(culling) 등의 작업에서 활용된다.기본개념Unity의 Layer는 게임 오브젝트를 논리적으로 그룹화하는 시스템이다. Tag와 마찬가지로, 각 게임 오브젝트는 하나의 Layer에 할.. 더보기
[Unity] Tag Unity에서 Tag는 게임 오브젝트를 식별하고 분류하기 위한 문자열 라벨이다. Tag를 사용하면 특정 오브젝트 그룹에 쉽게 접근하거나 필터링할 수 있다.예를 들어, 적 오브젝트는 "Enemy" 태그를, 플레이어는 "Player" 태그를 지정하고, Enemy/Player에 해당하는 오브젝트 전체를 쉽게 접근 및 필터링이 가능하다.Tag의 특징각 게임 오브젝트는 하나의 Tag만 가질 수 있다.Tag는 프로젝트 설정에서 사전에 정의해야한다.Tag는 문자열 비교를 통해 특정 오브젝트를 식별하는 데 사용된다.Tag는 대소문자를 구분한다.Tag와 관련된 주요 함수GameObject.CompareTag오브젝트가 특정 태그를 가지고 있는지 확인한다.if (gameObject.CompareTag("Enemy")){ .. 더보기
[Unreal] API 클래스 이름에 붙는 API는 매크로다.이는 DLL끼리 서로 노출시키는 것으로, 사용 방법에 따라 모듈 내부에서만 사용하는 경우에는 캡슐화를 제공하고 외부에서는 사용할 부분과 사용하지 않을 부분을 구분한다. 클래스에 선언 시 (클래스이름_API) 모두 OPEN하여 사용한다는 뜻이다.만일 클래스에 선언하지 않고, 특정 함수에만 API 선언을 하면, 해당 함수만 OPEN 한다. 이를 mini API라고 한다.-> 이렇게 오픈된 것들은 다른 모듈에서 자유롭게 접근이 가능하다. 일종의 함수용 namespace라고 생각해도 무방하다. 핵심은 캡슐화다! 더보기