Unity 19

Unity XR 아키텍처 구조 이해 (OpenXR부터 XRI까지)

이 글의 목표Unity로 XR을 만들 때 “기능을 갖다 쓰는 수준”을 넘어서, XR이 엔진 안에서 어떤 계층 구조로 동작하는지를 이해하는 게 목표다.이 글을 다 읽고 나면 아래를 말로 설명할 수 있어야 한다.Unity에서 XR 트래킹/입력 데이터는 어떤 흐름으로 올라오는가?OpenXR Runtime / Unity OpenXR Plugin / XR Subsystem / XRI의 역할 차이는?기기가 없어도 학습/검증이 가능한 이유는?1) 왜 Unity XR 구조를 알아야 할까? (XR 직무 관점)실무/면접에서 많이 나오는 질문들:“Unity XR 구조 설명해보세요.”“OpenXR을 왜 쓰나요?”“XRI는 OpenXR이랑 어떤 관계예요?”“Input System이랑 연결은 어떻게 돼요?”여기서 구조를 설명 못..

Unity/Unity 학습 2026.02.26

Unity XR 개발의 시작: OpenXR 구조부터 이해하기

들어가며XR 개발을 시작하면 가장 먼저 마주치는 질문이 있다.“Unity로 XR을 만든다는 게 정확히 무슨 의미일까?”많은 초보 XR 개발자들이 튜토리얼을 따라 하며 손과 오브젝트는 움직이게 만들지만, Unity–XR 기기–OpenXR의 관계를 명확히 설명하지 못한 채 넘어간다.1. 왜 OpenXR부터 이해해야 할까?실무 XR 개발에서는 특정 기기 하나만을 대상으로 개발하지 않는다.QuestVivePico처럼 서로 다른 XR 기기를 하나의 코드 구조로 대응해야 한다.이때 핵심 역할을 하는 것이 바로 OpenXR다.OpenXR는 XR 기기와 엔진(Unity, Unreal)을 연결하는 표준 인터페이스이며, 현재 대부분의 XR 프로젝트에서 기본 전제로 사용된다.즉,Unity XR 개발을 한다는 것은OpenXR..

Unity/Unity 학습 2026.01.25

Unity 생명주기 함수 정리 : Update vs FixedUpdate vs LateUpdate

Update()void Update(){ // 프레임마다 실행되는 일반적인 로직}매 프레임마다 호출주로 사용자 입력 처리, UI 상태 갱신, 애니메이션 트리거 등에 사용프레임률이 높아지면 호출 횟수도 많아짐사용 예시: Input.GetKeyDown(), transform.Translate(), SetActive(), Animator.SetTrigger() 등 FixedUpdate()void FixedUpdate(){ // 물리 연산 및 Force 적용}**고정된 간격(Time.fixedDeltaTime, 기본 0.02초)**으로 호출\Unity의 물리 엔진(PhysX)이 이 주기로 동작함Rigidbody 이동, Force, Torque 등의 물리 연산은 반드시 여기서 처리해야 함사용 예시: R..

Unity/C# 학습 2025.08.06

Unity Coroutine 개념과 사용법

게임을 개발하다 보면, 어떤 동작을 몇 초 후에 실행하거나, 특정 조건이 만족될 때까지 기다리거나, 프레임마다 반복 실행해야 하는 상황이 자주 생깁니다.이럴 때 유용한 기능이 바로 Unity의 Coroutine(코루틴) 입니다. Coroutine이란?Coroutine은 Unity에서 비동기 처리를 가능하게 해주는 C# 기반의 유니티 전용 기능입니다.일반적인 C# 함수는 동기적으로 실행되지만, Coroutine은 일시 정지/재개가 가능한 함수로, 시간 기반 흐름을 직접 제어할 수 있습니다. Coroutine 기본 구조IEnumerator WaitAndPrint(){ Debug.Log("시작"); yield return new WaitForSeconds(2f); Debug.Log("2초 후 ..

Unity/C# 학습 2025.08.04

Unity C#에서 Delegate와 Event 차이점

Unity를 공부하면서 델리게이트(delegate)와 이벤트(event)를 자주 접하게 됩니다.하지만 두 개념이 비슷해 보이면서도 미묘하게 다르기 때문에, 구조적인 이해가 중요합니다.이번 글에서는 개념, 차이점, Unity 내 활용 예시까지 간단하게 정리해보겠습니다. Delegate란?Delegate는 함수를 변수처럼 참조하고 실행할 수 있는 C# 기능입니다. 즉, 어떤 함수를 나중에 호출하도록 저장하고, 필요할 때 실행하는 방식입니다. 콜백 함수나 유동적인 로직 연결이 필요할 때 자주 사용됩니다. 사용 예시public delegate void MyDelegate(); // 함수 서명 정의MyDelegate callback = MyFunction; // 함수 참조 저장callback(); ..

Unity/C# 학습 2025.08.03

클래스(class)와 구조체(struct)의 차이점

항목classstruct타입 종류참조 타입값 타입메모리 저장 위치힙, 스택에 참조만 저장스택 또는 인라인 저장할당/복사참조 전달(주소 공유)값 복사(독립 복사본 생성)기본 생성자사용자 정의 가능파라미터 없는 생성자 정의 불가(컴파일러 자동 생성)상속 가능여부O(다형성 지원)X(인터페이스는 구현 가능)용도복잡한 객체, 상태 변경이 잦은 객체작고 불변에 가까운 데이터 구조Unity 예시GameObject, MonoBehaviourVector2, Vector3, Color, RaycastHit class는 힙, struct는 스택에 저장되므로, 값 타입인 sturct를 잘 활용하면 GC(가비지 컬렉션) 발생을 줄이고, 성능을 향상시킬 수 있다.특히 Unity에서는 Update()에서 반복 호출되는 코드에서의 ..

Unity/C# 학습 2025.07.17

값 타입(Value Type)과 참조 타입(Reference Type) 차이

값 타입(Value Type)이란?변수 자체에 데이터가 저장되, 주로 스택(stack)에 저장된다.변수 간 대입 시 값이 복사(copy)되어 전달되므로 서로 독립적인 값을 유지한다.대표적으로 int, float, bool, struct등이 있다. 참조 타입(Reference Type)이란?힙(heap) 메모리에 데이터를 저장하고, 변수에는 해당 객체의 참조(주소)가 저장된다.변수 간 대입 시 주소가 복사되기 대문에, 하나를 수정하면 다른 쪽도 영향을 받는다.대표적으로 class, string, object, array등이 있다. 함수 인자 전달 시값 타입(Value Type)은 복사되어 전달된다.참조 타입(Reference Type)은 참조(주소)가 전달되어 함수 내부에서 변경 시 원본에 영향을 미친다...

Unity/C# 학습 2025.07.16

Unity MonoBehaviour 클래스의 Awake, Start, Update 메서드의 개념

Unity에서 MonoBehaviour 클래스의 생명주기 함수는 객체의 초기화 및 실행흐름을 관리하는 중요한 메서들이다. Awake() : 오브젝트가 씬에서 인스턴스화 될 때 가장 먼저 호출되며, 비활성 상태여도 호출됨. 의존성 주입, 컴포넌트 참조 등 객체 간 연결을 초기화하는 데 주로 사용.Start() : Awake가 모두 호출된 이후, 오브젝트가 활성화된 상태일 경우 첫 프레임 전에 단 한 번 호출됨. 씬에 로딩된 상태에서 게임 플레이가 시작될 때 필요한 초기화 로직에 적합.Update() : 게임이 실행되는 동안 매 프레임 호출되며, 키 입력 처리, 위치 갱신, 상태 확인 등 지속적인 업데이트가 필요한 로직을 구현할 때 사용됨.

Unity/Unity 학습 2025.07.15

유니티 public vs SerializeField 차이점 정리

둘 다 에디터의 인스펙터에 보이기 때문에 비슷한 듯 다른 두 가지에 대한 차이점을 정리하려고 한다. public이란?public은 클래스 외부에서도 접근 가능한 멤버를 정의할 때 사용하는 접근 제한자public int health = 100;인스펙터(Inspector)에서 값이 노출됨외부 클래스에서도 object.health처럼 직접 접근 가능매우 직관적이지만, 캡슐화(정보 은닉)가 깨질 수 있음 SerializeField는 무엇인가?SerializeField는 private 변수임에도 인스펙터에서 보여지도록 해주는 Unity의 속성(Attribute)[SerializeField]private int speed = 5;인스펙터에서는 public처럼 값이 보이고 수정 가능외부 스크립트에서는 접근 불가능 (..

Unity/Unity 학습 2025.06.20

유니티3D 문 열고/닫기 상호작용 만들기

간단한 코드 예시와 함께 문 열고 닫는 상호작용을 만들어보려고 한다. 1. 인터페이스 정의상호작용 대상에 붙일 인터페이스를 정의한다.public interface IInteractable{ void Interact(); string GetInteractText(); // UI 힌트용} 2. Layer 지정Door 오브젝트의 Layer를 지정해준다.알맞은 Layer가 없다면 Add Layer 클릭 후 추가한다.Door는 Collider 컴포넌트가 있어야 한다. 3. 상호작용 Text 추가Hierarchy >> UI >> Text - TextMeshPro 추가Canvas와 함께 Text가 자동생성된다.Canvas 상에서 원하는 위치, 앵커, 글씨체 같은 것들을 수정한다. 4. Interactio..

Unity/Unity 학습 2025.06.19