복합체
복합 파일에서 런타임에 엔티티와 컴포넌트의 트리를 생성합니다
하나의 컴포지트 은(는) 다음의 트리를 설명하는 파일입니다 엔티티와 컴포넌트. 각 엔티티를 하나씩 만드는 코드를 작성하는 대신, 그 구조를 컴포지트 파일에 저장해 두고 한 번의 호출로 전체를 생성할 수 있습니다.
이미 자신도 모르게 컴포지트를 사용하고 있을 수 있습니다:
모든 씬에는
main.composite파일이 있습니다. 여기에는 씬 에디터를 사용하는 것입니다.. 이 파일은 씬이 시작될 때 자동으로 로드됩니다.사용자 지정 항목 은(는) 다음으로 저장됩니다
composite.json파일입니다. 각 Custom Item은 씬 전반에서 재사용할 수 있는 컴포지트입니다.
이 페이지에서는 런타임에 코드에서 컴포지트를 생성하는 방법을 다룹니다. 예를 들어 씬 로직의 일부로 Custom Item을 동적으로 생성하는 방법입니다.
컴포지트 생성
컴포지트를 생성하려면 두 단계가 필요합니다: 로드 컴포지트 파일을 먼저, 그다음 생성 합니다. 로딩은 비동기이고 생성은 동기이므로, 패턴은 항상 로드 후 생성입니다:
import { engine, Composite, getCompositeProvider } from "@dcl/sdk/ecs";
export async function spawnBarrel() {
const src = "barrel.composite";
const provider = getCompositeProvider();
if (!provider || !provider.loadComposite) return;
// 1. 파일에서 컴포지트를 로드합니다
const resource = await provider.loadComposite(src);
// 2. 생성합니다: 모든 엔티티와 컴포넌트를 만듭니다
const barrel = Composite.instance(engine, resource, provider);
return barrel;
}provider.loadComposite(src) 컴포지트 파일을 읽어 메모리에 로드합니다. 다음으로 만든 일반적인 씬에서는 @dcl/sdk컴포지트 프로바이더가 이미 설정되어 있으며, 다음으로 접근할 수 있습니다 getCompositeProvider() 함수를 통해 @dcl/sdk/ecs.
Composite.instance() 그다음 컴포지트에 설명된 모든 엔티티와 그 컴포넌트들을 생성하고, 루트 엔티티 를 반환합니다. 나중에 컴포넌트를 읽거나 변경할 때 이 반환된 엔티티를 사용하세요. 예를 들어 생성된 아이템의 위치를 바꾸거나 제거할 수 있습니다.
기존 엔티티에 생성
기본적으로 Composite.instance() 생성된 트리를 담기 위해 새 엔티티를 만듭니다. 다음을 전달하세요: rootEntity 옵션에 포함해 이미 가지고 있는 엔티티에 생성하세요:
생성된 컴포지트 배치
생성된 컴포지트를 특정 위치, 회전 또는 크기에 배치하려면 다음을 설정하세요: Transform 다음에서 반환된 루트 엔티티에 컴포넌트를 설정하세요: Composite.instance().
현재 제한 사항: 중첩된 컴포지트
생성은 자체 포함된 컴포지트와 Custom Item에서 작동합니다. 컴포지트는 자신의 엔티티 중 하나에서 다른 컴포지트를 참조할 수 있지만 loadComposite() 합니다 아닙니다 그 중첩된 참조를 재귀적으로 따라가지는 않습니다: 전달한 파일만 로드합니다.
생성할 때는 Composite.instance() 이미 메모리에 있는 중첩 참조를 재귀적으로 따라갑니다. 중첩 컴포지트가 로드되어 있지 않으면(다음 항목 외의 모든 경우: main.composite씬에 번들된 유일한 컴포지트), 해당 분기는 경고를 기록하고 건너뜁니다. 중첩 참조가 있는 컴포지트를 생성하려면 다음을 호출하세요: loadComposite() 먼저 참조된 각 파일에 대해 수행하세요 — 또는 더 간단하게, 생성하는 컴포지트는 자체 포함형으로 유지하세요.
관련 페이지
엔티티 및 컴포넌트 — 컴포지트가 설명하는 구성 요소입니다.
사용자 지정 항목 — 컴포지트로 저장된 재사용 가능한 아이템입니다.
스마트 아이템 - 고급 — Spawn Entity 액션을 사용해 코드 없이 컴포지트를 생성합니다.
씬 파일 — 어디에
main.composite씬 프로젝트에 존재합니다.
마지막 업데이트