기본 구성요소 정보

이 페이지에는 Stingray에 기본 포함되는 다양한 유형의 구성요소와 이번 버전에서 이 구성요소로 할 수 있는 작업에 대한 간략한 개요가 나와 있습니다.

구성요소 및 관리자 정보

Stingray의 각 구성요소 유형은 각각의 구성요소 관리자로 처리됩니다. 이 관리자는 구성요소 인스턴스가 어느 엔티티에 할당되었는지 추적하고, 각 구성요소 인스턴스가 유지하는 데이터가 내부적으로 일관되도록 하고, 구성요소에 필요한 모든 업데이트를 각 프레임마다 적용하는 일을 담당합니다.

예를 들어, 변환 구성요소 관리자는 변환 구성요소가 할당된 모든 엔티티 목록을 유지 관리합니다. 그리고 각 변환 구성요소에 해당 엔티티에 대한 유효한 3D 좌표가 포함되어 있는지 확인하고, 해당 값의 이동, 회전 및 배율 조정을 처리합니다.

이 구성요소 관리자는 Lua에 표시되기 때문에 필요한 경우 게임 플레이 중에 이 관리자와 상호 작용할 수 있습니다. 예를 들어, stingray.TransformComponent 오브젝트가 변환 구성요소 관리자를 나타냅니다.

참고: 이름이 xxxComponent인 Lua 오브젝트는 개별 엔티티에 할당된 개별 구성요소 인스턴스가 아닌 구성요소 관리자를 나타냅니다. 예를 들어, stingray.TransformComponent 오브젝트는 엔티티에 할당된 개별 구성요소가 아닌 모든 변환 구성요소를 처리하는 관리자입니다. 즉, 해당 구성요소 관리자 중 하나가 제공하는 함수를 호출하면 보통 어느 엔티티와 어느 구성요소 인스턴스에 적용할지도 지정해야 합니다.

게임 플레이 스크립트에서 이 관리자에 액세스하여 사용하는 방법은 게임 플레이 중 엔티티와 상호 작용도 참조하십시오. 각 관리자가 표시하는 함수에 대한 자세한 내용은 Lua API 참조의 설명서를 참조하십시오.

데이터 구성요소

데이터 구성요소는 데이터 값 저장 및 검색을 처리합니다. 예를 들어, 음영처리 환경이 렌더링 및 포스트 효과 설정을 저장하는 데 사용하는 구성요소는 모두 특수 데이터 구성요소입니다. 자체 사용자 정의 구성요소를 생성(사용자 정의 구성요소 생성 참조)하는 경우 데이터 구성요소의 한 유형일 가능성이 큽니다.

Stingray 편집기의 Property Editor 패널에서 데이터 구성요소의 값을 설정할 수 있습니다. stingray.DataComponent 관리자 인터페이스를 사용하여 Lua를 통해 런타임 시 이 데이터 값을 설정하고 검색할 수도 있습니다(게임 플레이 중 엔티티와 상호 작용 참조). 또한, Story Editor를 사용하여 특정 유형의 데이터 구성요소 값을 애니메이션할 수 있습니다.

디버그 이름 구성요소

디버그 이름 구성요소는 다음 사항을 제외하고, 데이터 구성요소와 매우 비슷합니다.

이 구성요소는 Stingray 편집기에 표시되지 않지만 데이터 구성요소와 매우 비슷하게 stingray.DebugNameComponent 관리자를 사용하여 Lua에서 이름 값을 설정하고 가져올 수 있습니다.

스크립트 및 흐름 구성요소

스크립트 및 흐름 구성요소를 사용하면 엔티티를 Lua 스크립트 모듈 또는 흐름 그래프에서 구현하는 behavior와 연결할 수 있습니다. 흐름 또는 Lua를 사용하여 엔티티의 동작 설정을 참조하십시오.

태그 구성요소

태그 구성요소를 이용하면 서로 다른 유형의 구성요소를 구별할 수 있습니다. 하나 이상의 서로 다른 엔티티에 문자열 ID 태그를 연결해두고, 태그를 사용해 엔티티를 검색할 수 있습니다.

이 구성요소는 Stingray Editor에 표시되지 않지만 Lua의 stingray.TagComponent API를 사용하여 자유롭게 태그를 할당하고 쿼리할 수 있습니다.

각 엔티티에 하나의 태그 구성요소만 할당할 수 있지만 태그 구성요소는 그 수에 관계없이 태그를 얼마든지 처리할 수 있습니다.

변환 구성요소

변환 구성요소는 해당 엔티티의 3D 위치, 회전 및 배율을 관리합니다. 이 구성요소는 Stingray 편집기에 완전히 표시되며, stingray.TransformComponent 관리자를 통해 Lua에도 표시됩니다.

변환 구성요소는 엔티티 간 "상위-하위" 관계도 처리합니다. 여러 엔티티를 하나의 계층으로 링크하여 하위 요소의 3D 변환이 상위 요소를 기준으로 설정되도록 할 수 있습니다. 상위 요소의 3D 변환을 변경하면 링크되어 있는 모든 하위 요소에도 영향을 줍니다. 현재 Lua에서만 변환 구성요소를 이렇게 사용할 수 있습니다.

각 엔티티에 하나의 변환 구성요소만 할당할 수 있습니다. 언제든 각 엔티티는 하나의 상위 엔티티에만 링크될 수 있지만 하위 엔티티에는 얼마든지 링크될 수 있습니다.

유닛 구성요소

유닛 구성요소는 엔티티를 유닛 리소스와 연관시킵니다. 유닛 구성요소를 보유한 엔티티를 생성 및 생성 취소할 경우 해당 유닛 리소스의 인스턴스도 자동으로 생성 및 생성 취소됩니다.

유닛 구성요소는 Stingray 편집기에서 완전히 노출됩니다. 엔티티에 유닛 구성요소를 추가할 수 있고 Property Editor 패널을 사용해 관련 유닛 리소스를 설정할 수 있습니다. 또한 stingray.UnitComponent 관리자를 사용해 Lua 내부에서 액세스할 수도 있습니다.

3D 표준에서 유닛의 배치, 회전 및 배율은 엔티티의 변환 구성요소에 의해 결정됩니다. 따라서 유닛 구성요소를 사용할 경우 일반적으로 변환 구성요소를 사용하여 엔티티 역시 설정합니다.

각 엔티티에는 하나의 연관 유닛을 포함한 단 하나의 유닛 구성요소만 할당될 수 있습니다.

참고: 결과적으로 유닛이 Stingray에서 현재 담당하고 있는 모든 항목(메시, 장면 그래프, 물리적 액터 등)을 엔티티가 직접 관리할 수 있도록 만들려고 했습니다. 우리가 더욱 더 다양한 유형의 구성요소에 대한 지원을 통해 엔티티 시스템을 확장하는 반면, 유닛 구성요소는 엔티티가 단기적으로 가시적인 게임 오브젝트를 관리할 수 있는 실용적인 방법을 제공합니다.

기타 구성요소

Lua API를 둘러보면 몇 가지 다른 유형의 구성요소 관리자도 표시되어 있다는 것을 알 수 있습니다. 하지만 이 구성요소는 아직 편집기 또는 Lua를 통해 쉽게 생성할 수 없는 데이터를 기반으로 하고 있기 때문에 이번 버전에서는 아직 사용하기에 효율적이지 않습니다. 해당 구성요소는 다음과 같습니다.