본문 바로가기

전체 글128

03.08 (TIL) Scene Load의 종류 비교 Unity에서 씬(Scene)을 로드하는 방법에는 주로 SceneManager.LoadScene 메서드를 사용하는 방식과 SceneManager.LoadSceneAsync를 사용하는 비동기 방식이 있습니다. 각각의 방식은 씬 로딩 시의 사용자 경험과 게임의 흐름에 영향을 미칩니다. SceneManager.LoadScene: 이 메서드는 씬을 동기적으로 로드합니다. 새 씬으로의 전환을 시작하면, 현재 진행 중인 모든 작업이 완료될 때까지 다음 코드로 넘어가지 않습니다. 씬 로딩 도중에는 게임이 일시적으로 멈추는 현상이 발생할 수 있어, 작은 씬에서 주로 사용됩니다. 사용 예: SceneManager.LoadScene("GameScene"); SceneManager.LoadS.. 2024. 3. 8.
03.07 (TIL) Unity에서 레이어와 태그의 역할 및 사용 방법 Unity에서 레이어와 태그는 게임 오브젝트를 분류하고 구별하는 데 사용됩니다. 이러한 분류는 오브젝트 관리, 상호작용, 검색을 용이하게 하며, 특정 기능을 적용할 대상을 선별하는 데 도움을 줍니다. 태그(Tags): 태그는 오브젝트를 간단하게 식별하기 위한 문자열 레이블입니다. 예를 들어, "Player", "Enemy", "Collectible"과 같이 오브젝트의 용도나 유형을 나타내는 태그를 지정할 수 있습니다. 스크립트 내에서 GameObject.FindGameObjectWithTag("Player")와 같은 함수를 사용하여 특정 태그를 가진 오브젝트를 찾을 수 있습니다. 레이어(Layers): 레이어는 오브젝트를 여러 그룹으로 나누어 관리하고, .. 2024. 3. 7.
03.06 (TIL) 어떤 에셋을 사용해 보셨나요? 없다면 알고 있는 에셋이 있나요? Standard Assets: 유니티에서 기본적으로 제공하는 에셋 패키지로, 카메라 컨트롤, 차량, 환경, 캐릭터 컨트롤러 등 다양한 기본 컴포넌트와 예제 씬이 포함되어 있습니다. TextMeshPro: 고품질의 텍스트 렌더링을 지원하는 에셋으로, 다양한 스타일링 옵션과 효과를 제공하여 UI의 텍스트 표현을 풍부하게 만들 수 있습니다. Cinemachine: 고급 카메라 워크와 동적 카메라 시스템을 쉽게 구현할 수 있는 강력한 에셋입니다. 카메라 추적, 블렌딩, 가상 카메라 시스템 등을 제공합니다. ProBuilder: 씬 내에서 직접 3D 모델링을 할 수 있게 해주는 에셋으로, 프로토타이핑이나 간단한 모델링 작업에 유용합니다. Asset .. 2024. 3. 7.
03.05 (TIL) 컬링(Culling) 종류와 사용 이유 컬링은 렌더링 과정에서 불필요한 오브젝트를 제외시켜 성능을 최적화하는 기법입니다. 주로 두 가지 종류의 컬링이 사용됩니다: 프러스텀 컬링(Frustum Culling): 카메라의 시야각 안에 들어오지 않는 오브젝트를 렌더링에서 제외하는 기법입니다. 카메라의 시야 프러스텀(Frustum) 밖에 위치한 오브젝트는 화면에 표시되지 않으므로, 이를 렌더링 대상에서 제외하여 성능을 향상시킵니다. 오클루전 컬링(Occlusion Culling): 다른 오브젝트에 의해 가려져 보이지 않는 오브젝트를 렌더링에서 제외하는 기법입니다. 화면에 직접적으로 보이지 않는 오브젝트는 렌더링 과정에서 제외하여, 필요한 오브젝트의 렌더링에 집중함으로써 성능을 최적화합니다. 사용 이유: 컬링 기.. 2024. 3. 5.
03.04 (TIL) 벡터 정규화(Normalization)의 이유 객체를 이동시킬 때 벡터를 정규화하는 이유는 주로 방향을 유지하면서 일정한 속도로 이동하기 위함입니다. 벡터를 정규화하면 그 길이가 1이 되는 단위 벡터(unit vector)를 얻을 수 있으며, 이 단위 벡터는 방향을 나타내는 데 사용됩니다. 정규화된 벡터에 스칼라 값을 곱하여, 해당 방향으로 일정한 속도로 이동시킬 수 있습니다. 일정한 속도 유지: 정규화된 벡터에 이동하려는 속도를 곱하면, 방향은 유지하되 정해진 속도로 이동할 수 있습니다. 이는 벡터의 길이(크기)에 관계없이 일정한 이동 속도를 보장합니다. 방향성 유지: 이동, 회전 등의 연산에서 방향성만을 고려할 필요가 있을 때, 벡터를 정규화함으로써 방향 정보만을 추출할 수 있습니다. 예를 들어, 두.. 2024. 3. 5.
02.29 (TIL) 오브젝트 풀링(Object Pooling)이란? 오브젝트 풀링은 게임 개발에서 성능 최적화 기법 중 하나로, 게임 플레이 동안 반복적으로 생성 및 파괴되는 객체들을 관리하는 방법입니다. 오브젝트 풀링은 필요한 객체들을 게임 시작 시 미리 생성하고, 풀(pool)에 저장해 두었다가 필요할 때 재사용(reuse)하는 방식입니다. 객체가 더 이상 필요 없을 때는 파괴하지 않고 풀에 반환하여 다시 사용할 수 있게 합니다. 구현 방법: 오브젝트 풀 생성: 특정 타입의 오브젝트를 저장할 수 있는 리스트나 큐를 생성합니다. 오브젝트 미리 생성 및 저장: 게임 시작 시 또는 필요에 따라 특정 수의 오브젝트를 생성하고, 이를 오브젝트 풀에 저장합니다. 오브젝트 요청 및 반환 처리: 오브젝트가 필요할 때 풀에서 오브젝트를.. 2024. 3. 5.
02.28 (TIL) 유니티 렌더링 파이프라인 유니티 렌더링 파이프라인은 게임 씬의 오브젝트를 화면에 그리는 과정을 담당합니다. 이 과정은 여러 단계로 이루어져 있으며, 각 단계에서는 다양한 렌더링 작업이 수행됩니다. 유니티에서는 다양한 렌더링 파이프라인을 제공하여, 개발자가 프로젝트의 요구사항에 맞춰 최적의 렌더링 방식을 선택할 수 있도록 합니다. 렌더링 파이프라인의 종류: 내장 렌더링 파이프라인(Built-in Rendering Pipeline): 유니티에서 기본적으로 제공하는 전통적인 렌더링 파이프라인으로, 간단한 프로젝트나 빠른 프로토타이핑에 적합합니다. 스크립터블 렌더 파이프라인(Scriptable Render Pipeline, SRP): 개발자가 렌더링 파이프라인의 동작을 세밀하게 제어할 수 있도록 설계된 렌더링 .. 2024. 2. 28.
02.27 (TIL) 유니티로 타이머 구현 알고리즘 유니티에서 타이머를 구현하는 가장 일반적인 방법은 Update() 메서드를 사용하여 시간을 추적하는 것입니다. 아래는 간단한 카운트다운 타이머 구현 방법입니다: 변수 선언: 타이머의 남은 시간을 저장할 변수를 선언합니다. Update 메서드 사용: 매 프레임마다 Update() 메서드 내에서 Time.deltaTime을 사용하여 타이머 변수에서 시간을 감소시킵니다. 타이머 검사: 타이머가 0 이하로 내려갔는지 검사하고, 0 이하로 내려간 경우 타이머가 완료되었음을 알립니다(예: UI 업데이트, 특정 이벤트 트리거 등). 간단 구현 더보기 using UnityEngine; public class TimerExample : MonoBehaviour { public float t.. 2024. 2. 27.
02.26 (TIL) Unity의 Update 메서드 종류와 특징 Unity에서는 게임 오브젝트의 상태를 업데이트하기 위해 여러 종류의 Update 메서드를 제공합니다. 각각은 다른 시점에 호출되며, 특정 유형의 작업을 수행하기에 적합한 특징을 가집니다. Update() 매 프레임마다 호출됩니다. 게임 로직, 사용자 입력 처리 등 대부분의 일반적인 업데이트 작업을 수행하는 데 사용됩니다. 프레임마다 실행되므로, 프레임 속도에 따라 호출 빈도가 달라집니다. FixedUpdate() 일정한 시간 간격으로 호출되며, 주로 물리 업데이트(리지드바디 이동, 충돌 체크 등)에 사용됩니다. 물리 시뮬레이션을 일관되게 유지하기 위해 프레임 속도와 무관하게 일정한 주기로 실행됩니다. "Time.fixedDeltaTime"을 통해 호출 주기를.. 2024. 2. 26.
02.23 (TIL) MonoBehaviour 클래스의 주요 메서드 MonoBehaviour는 Unity에서 스크립트 작성을 위한 기본 클래스입니다. 게임 오브젝트에 부착하여 사용하며, 다양한 이벤트에 대응하는 메서드를 제공합니다. 아래는 MonoBehaviour 클래스의 주요 메서드와 그 기능을 간략히 설명합니다: Awake(): 오브젝트 생성 시 최초에 한 번만 호출되며, 초기화 작업에 주로 사용됩니다. 이 시점에서는 모든 게임 오브젝트가 로드되었지만, 아직 게임 플레이가 시작되지 않은 상태입니다. Start(): Awake() 이후에, 첫 번째 프레임 업데이트 전에 호출됩니다. 다른 오브젝트와의 상호작용이 필요한 초기화 작업에 적합합니다. Update(): 매 프레임마다 호출되며, 게임의 주요 로직 처리에 사용됩니다. .. 2024. 2. 23.