Skip to content

Latest commit

 

History

History
44 lines (28 loc) · 5.7 KB

010-Understanding-RealityKit's-modular-architecture.md

File metadata and controls

44 lines (28 loc) · 5.7 KB

Understanding RealityKit’s modular architecture

Learn how everything fits together in RealityKit.

Overview

  • RealityKit은 앱, 게임 및 기타 몰입형 경험을 구축하기 위해 설계된 3D 프레임워크입니다.
  • 객체 지향 언어로 빌드되고 객체 지향 디자인 원칙을 사용합니다.
  • RealityKit의 아키텍처는 애플리케이션 객체를 세 가지 유형 중 하나로 나누는 **ECS(엔티티 컴포넌트 시스템)**라는 패러다임에 기반한 모듈식 디자인을 선호합니다.
  • 다른 객체에 대한 참조를 보유하는 인스턴스 변수를 추가하여 객체를 구축하는 과도한 컴포지션 사용을 지양합니다.
  • ECS 패러다임을 따르면 상속 체인이 매우 다르더라도 컴포넌트에 포함된 기능을 여러 다른 엔티티에서 재사용할 수 있습니다.
  • 두 개체에 엔티티 이외의 공통 조상이 없더라도 두 개체에 동일한 컴포넌트를 추가하여 동일한 동작이나 기능을 부여할 수 있습니다.

Start with Entities

엔티티(Entities)는 RealityKit의 핵심 Actor 입니다.

  • Scene에 넣을 수 있는 모든 오브젝트는 표시 여부와 관계없이 엔티티이며 엔티티의 하위 항목이어야 합니다.
  • 엔티티는 3D 모델, 셰이프 프리미티브, 조명, 사운드 이미터나 트리거 볼륨과 같은 보이지 않는 항목일 수도 있습니다.
  • 엔티티에 컴포넌트를 추가하여 특정 기능 유형과 관련된 추가 상태를 저장할 수 있도록 합니다. 엔티티 자체에는 상대적으로 적은 수의 프로퍼티가 포함됩니다: 거의 모든 엔티티 상태는 엔티티의 컴포넌트에 저장됩니다.

RealityKit은 다양한 종류의 오브젝트를 표현하는 데 사용할 수 있는 여러 엔티티 유형을 제공합니다. 예를 들어 모델엔티티는 .usdz 또는 .reality 파일에서 임포트한 3D 모델과 같은 3D 모델을 나타냅니다. 이렇게 제공되는 엔티티는 본질적으로 특정 컴포넌트가 이미 추가된 엔티티일 뿐입니다. 예를 들어 엔티티의 인스턴스에 모델 컴포넌트를 추가하면 모델엔티티와 동일한 기능을 가진 엔티티가 생성됩니다.

Add Components to entities

컴포넌트는 엔티티별 상태를 관리합니다.

컴포넌트는 엔티티에 추가하는 모듈식 빌딩 블록으로, 시스템이 작동할 엔티티를 식별하고 시스템이 의존하는 엔티티별 상태를 유지합니다. 컴포넌트는 로직을 포함할 수 있지만 컴포넌트 로직은 속성 값의 유효성을 검사하거나 초기 상태를 설정하는 코드로 제한하세요.

로직은 작성하려면 시스템을 사용하세요.

엔티티의 동작에 영향을 주거나 모든 프레임에서 잠재적으로 상태를 변경하는 로직은 시스템을 사용하세요. 예를 들어 엔티티에 접근성 정보를 추가하려면 엔티티에 접근성 컴포넌트를 추가하고 해당 필드에 접근성 시스템에 필요한 정보(예: VoiceOver가 읽는 설명을 레이블 속성에 입력)를 채우면 됩니다.

한 번에 하나의 특정 유형 컴포넌트를 사용할 수 있습니다.

엔티티는 한 번에 특정 유형의 컴포넌트 사본을 하나만 보유할 수 있다는 점에 유의하세요. 따라서 예를 들어 하나의 엔티티에 두 개의 접근성 컴포넌트를 추가할 수 없습니다. 이미 접근성 컴포넌트가 있는 엔티티에 접근성 컴포넌트를 추가하면 새 컴포넌트가 이전 컴포넌트를 대체합니다.

Create systems to implement entity behavior

시스템에는 특정 유형의 엔티티 동작을 구현하거나 특정 유형의 엔티티 상태를 업데이트하기 위해 RealityKit이 매 프레임마다 호출하는 코드가 포함되어 있습니다. 시스템은 컴포넌트를 사용하여 엔티티별 상태를 저장하고 특정 컴포넌트 또는 컴포넌트 조합을 가진 엔티티를 찾아서 동작할 엔티티를 쿼리합니다.

예를 들어, 게임에는 손상되거나 파괴될 수 있는 모든 엔티티의 생명력을 모니터링하고 업데이트하는 피해 시스템이 있을 수 있습니다. 시스템은 일반적으로 하나 이상의 컴포넌트와 함께 작동하므로, 피해 시스템은 체력 컴포넌트를 사용하여 각 개체가 받은 피해량과 파괴되기 전에 각 개체가 받을 수 있는 피해량을 추적할 수 있습니다. 또한 다른 컴포넌트와 상호 작용할 수도 있습니다. 예를 들어, 엔티티에 엔티티를 보호하는 방어구 컴포넌트가 있을 수 있으며, 피해 시스템도 해당 컴포넌트에 저장된 상태를 사용해야 합니다.

매 프레임마다 피해 시스템은 생명력 컴포넌트가 있는 엔티티를 쿼리하고 앱의 현재 상태에 따라 해당 엔티티의 컴포넌트 값을 업데이트합니다. 엔티티가 너무 많은 피해를 입은 경우 시스템은 특정 애니메이션을 트리거하거나 씬에서 엔티티를 제거할 수 있습니다.

시스템에서 엔티티 로직을 작성하면 작업 중복을 방지할 수 있습니다. 이러한 유형의 로직이 엔티티 클래스에 있는 기존의 OOP 디자인 패턴을 사용하면 잠재적으로 영향을 받는 모든 엔티티에 대해 동일한 계산이 여러 번 수행되는 경우가 종종 있습니다. 계산이 잠재적으로 영향을 미치는 엔티티의 수에 상관없이 시스템은 계산을 한 번만 수행하면 됩니다.

자세한 내용은 다음 문서를 참고하세요.