Game Engine/Unity 9

[Unity] 전역 조명(GI)과 라이트 매핑, 라이프 프로브 개념

유니티는 현실세계의 빛을 물리엔진에서 구현하기 위해 빛을 직접광과 간접광 두 종류로 구분하여 연산하고 있다.  이러한 기술을 전역 조명(GI)이라고 한다. ✔️ 직접광 (Direct Light)방출되어 표면에 한번 닿은 후 눈(카메라)에 직접 반사되는 광원  ✔️ 간접광 (Indirect Light)표면에 여러번 닿는 광원, 스카이 라이트 등을 포함하여 궁극적으로 눈(카메라)에 반사되는 다른 모든 광   전역조명 (Global Illumination)전역 조명(GI)은 빛이 표면에 닿고, 반사되어 다른 표면에 간접적으로 영향을 주는 조명 시스템을 의미한다.이는 단순한 직접광만으로는 표현할 수 없는 현실적인 빛의 반사와 퍼짐을 가능하게 하며, 씬의 분위기와 몰입도를 크게 높여준다. 📌 실시간 조명 vs ..

Game Engine/Unity 2025.04.08

[Unity] 고정 조인트(Fixed Joint)

조인트(Joint)유니티의 조인트(Joint)는물리적으로 두 개의 객체를 연결하여제한된 방식으로 서로 상호작용하게 만드는 컴포넌트이다.즉, 조인트는 오브젝트들이서로 물리적으로 연결되어 움직이도록 제어할 수 있는 기능이다. 조인트는 서로 연결되는 두개의 오브젝트가 있어야 하며두 오브젝트에 모두 Rigidbody가 있어야 한다. 조인트의 해제 조건은조인트 컴포넌트의 프로퍼티인 'Break Force', 'Break Torque' 설정값에 따라 힘이 가해졌을 때 조인트가 해제된다.  📌  3D 조인트 종류Joint 종류설명사용 예시 Fixed Joint (고정조인트) 두 오브젝트를 고정. 움직임/회전 없음. 무너지는 다리, 고정된 기계 부품 Hinge Joint (중심점조인트)한 축으로 회전 가능. 도어,..

Game Engine/Unity 2025.04.08

[Unity] 물리 머티리얼 (Physics Material)

물리 머티리얼(Physics Material) 물리 머티리얼(Physics Material)은 충돌하는 오브젝트의 마찰 또는 바운스 효과를 조정하는데 사용된다. 물리 머티리얼을 만들고, 물리 오브젝트의 Collider에 넣으면 오브젝트에 마찰, 탄력성을 구현할 수 있다.물리 머티리얼 만들기 :   Assets > Create > Physic Material  📌 프로퍼티Dynamic Friction (동적 마찰) : 오브젝트가 움직이고 있을때 사용되는 마찰력으로 0~1 사이의 값. (0이면 얼음처럼 미끄러워지고, 1이면 오브젝트가 큰 힘이나 중력에 밀리지 않는 한 빨리 정지한다.)Static Friction (정적 마찰) : 오브젝트가 움직이지 않고 표면 위에 가만히 놓여있을 때 사용되는 마찰력으로 0..

Game Engine/Unity 2025.04.08

[Unity] PlayerPrefs 클래스를 활용한 데이터 저장

유니티에서 데이터를 저장하는 방식에는 여러가지가 있다. 데이터 저장 방식용도ScriptableObject고정 데이터 구조, 에디터에서 사용CSV / XML스프레드시트 기반 데이터SQLite / Firebase / PlayerPrefs 대규모, 온라인, 클라우드 저장Addressables / Resources / StreamingAssets외부 파일, 리소스 로딩JSON / Binary / PlayerPrefs세이브 파일, 설정 이중 PlayerPrefs는 가장 쉽고 간단하게데이터를 저장하고 활용할 수 있다.    📌 PlayerPrefs (Player Preferences)Unity에서 가장 간단하게 데이터를 저장하게 해주는 클래스로, 데이터를 암호화 하지 않고 로컬 레지스트리에 저장한다.보통 간단한 ..

Game Engine/Unity 2025.04.08

[Unity] 터널링(Tunneling)과 Collision Detection

유니티의 Rigidbody는 물리 컴포넌트로물리 충돌을 할 경우 Collision 이벤트를 발생시킨다. 이때 이 Collision 충돌 감지를 어떤 방식으로 처리할지에 대한 속성이바로 Collision Detection 속성이다. Collision Detection 속성은 4가지가 있고기본 Discrete가 설정되어있다.각 속성에 대한 이야기는 아래에서 하도록 하며먼저 Collision 충돌 체크의 원리를 이야기해보겠다.  📌 Collision Detection을 상황에 맞게 써야하는 이유 - 충돌 누락, 터널링(Tunneling) 유니티에서는 Rigidbody가 움직일 때, 프레임마다 콜라이더 위치를 계산해서 충돌을 체크하고있다. >> 매 프레임1. 현재 위치 → 다음 위치 이동 2. 두 위치 사이에..

Game Engine/Unity 2025.04.08

[Unity] 유용하게 활용되는 유니티 어트리뷰트(Attribute) 모음

인스펙터에서 관할하는 데이터가 많아지면 눈이 아프다...이럴때 인스펙터를 커스텀하는 용도로 사용할 수 있는게바로 어트리뷰트이다. 유니티의 어트리뷰트는 코드에 추가 정보를 붙이는 메타데이터로주로 에디터에서의 표시 방식이나 동작 방식을 제어하는데 활용된다. 시리얼라이즈필드나 헤더만 자주 사용했는데기타 어트리뷰트도 유용하게 사용할 수 있을 것 같다. 📌 유니티 Attribute 모음어트리뷰트설명사용예시SerializeFieldprivate 변수도 인스펙터에 노출[SerializeField] private int health;HideInInspectorpublic 변수 숨기기[HideInInspector] public float speed;Header("텍스트")변수 위에 제목 표시[Header("플레이어 스..

Game Engine/Unity 2025.04.08

[Unity] 런타임에 Resources 폴더에서 바로 리소스 로드하기

Unity에서 실행시간에 게임 오브젝트를 만들고 싶을 때보통 컴포넌트에 미리 GameObject를 할당해두고스크립트 내에서 해당 오브젝트를 Instantiate한다. 하지만 이럴 경우 프리팹을 외부에서 지정하지 않으면 동작하지 않기 때문에할당 누락으로 인한 오류 발생 가능성이 높고코드의 재사용성이 낮다. 유니티에서 기본적으로 제공되는 지정 폴더(Asset, Package 등) 인Resources에 사용할 리소스를 넣어두면따로 프리팹을 할당하지 않아도런타임에 바로 리소스를 로드하는게 가능하다. 로드는 무조건 Resources폴더에 있는 데이터만 가능하기 때문에Resources폴더에 넣어두어야 한다. Resources.Load("리소스명") Resources.Load("경로/리소스명")  📌 사용 가능한 ..

Game Engine/Unity 2025.04.08

[Unity] 간단한 싱글톤 사운드매니저 스크립트

SFX 중첩 재생이 거의 없고 간단한 사운드만을 요구하는 게임 프로젝트일 경우에 항상 쓰는 SoundManager 코드이다. 활용 예제SoundManagr.Instance.PlayBGM();  SoundManager.cs   // BGM 1, SFX 多using System.Collections;using System.Collections.Generic;using UnityEngine;public class SoundManager : MonoBehaviour{ [SerializeField] AudioSource bgmSource; [SerializeField] AudioSource sfxSource; [SerializeField] List sfxClipList; [SerializeF..

Game Engine/Unity 2025.01.15