사용자 정의 구성요소 생성

엔티티 시스템의 목표는 사용자가 쉽게 자기만의 구성요소를 생성하고, 순위 디자이너가 작업할 수 있도록 이를 Stingray 편집기에 표시하고, 런타임 시 프로젝트의 게임 플레이 코드에서 이 구성요소를 처리할 수 있도록 하는 것입니다.

이번 버전에서는 임의의 데이터 값을 처리하는 사용자 정의 구성요소를 설계할 수 있습니다.

개요: 사용자 정의 구성요소를 생성하고 사용하는 방법

  1. 프로젝트의 소스 폴더에 새로운 .component 리소스를 생성하여 새 구성요소를 정의합니다. 자세한 내용은 아래 섹션을 참조하십시오.

    팁: Script Editor를 사용하여 프로젝트에서 .component 리소스를 열고 편집합니다.

  2. Stingray 편집기를 다시 시작하고, 프로젝트를 로드합니다. (프로젝트에서 사용할 수 있는 구성요소 목록은 아직 자동으로 갱신되지 않습니다.)

  3. 기본 구성요소를 할당할 때와 같은 방식으로 새로운 구성요소 유형을 엔티티에 할당합니다. 엔티티에 구성요소 할당을 참조하십시오.

  4. Property Editor에서 해당 엔티티에 대한 구성요소 데이터 값을 설정합니다.

  5. 엔티티를 수준에 배치하거나 Lua 게임 플레이 코드에서 동적으로 생성합니다.

  6. Lua 게임 플레이 코드에서는 stingray.DataComponent 관리자를 사용하여 엔티티의 구성요소에 액세스하여 그 값을 읽거나 쓸 수 있습니다. 게임 플레이 중 엔티티와 상호 작용을 참조하십시오.

구성요소 예제

사용자 정의 .component 리소스를 생성하는 방법을 이해하는 가장 좋은 방법은 작업 예제로 시작해보는 것입니다.

음영처리 환경에서 제공하는 각각의 전역 조명 및 포스트 효과가 데이터 구성요소에 래핑되어 있습니다. 이 예제를 사용자 정의 데이터 구성요소의 모형으로 사용하여 데이터 구성요소 및 편집기가 처리할 수 있는 다양한 필드의 예제를 살펴볼 수 있습니다.

core/stingray_renderer/shading_environment_components.component 파일을 참조하십시오.

.component 구조

다음 블록은 샘플 .component 리소스를 보여줍니다. 이 예제는 두 개의 숫자 데이터 값을 저장하는 데이터 구성요소를 정의합니다.

export = "#component"
types = {
    component = {
        type = ":struct"
        implements = {
            "core/types/component" = true
        }
        fields = {
           str_data = {
                type = ":number"
                default = 18
                min = 1
                max = 200
                editor = {
                    label = "Strength"
                    step = 1
                }
            }
           tough_data = {
                type = ":number"
                default = 10
                min = 1
                max = 200
                editor = {
                    label = "Toughness"
                    step = 1
                }
            }
        }
        editor = {
            category = "Custom component"
            priority = 1200
            icon = "signal"
        }
        metadata = {
            name = "My Game Combat Stats"
            component = "data"
            tags = ["custom_combat_stats"]
        }
    }
}

이 구조는 대부분 사용자 정의 구성요소에서 동일하게 유지되어야 합니다. 다음 섹션은 사용자 정의할 수 있는 요소들을 설명한 것입니다.

fields

이 섹션은 구성요소가 처리하게 될 데이터를 정의합니다.

각 필드가 이름(예: 위 예제의 str_data)을 해당 필드에 저장된 데이터에 대한 설명과 연결합니다. 이 설명에는 필드에 저장되는 데이터의 유형(즉, 문자열, 숫자, 부울, 리소스 이름, 색상 등), 기본값, 허용되는 값, 그리고 이 필드를 Property Editor 패널에서 어떻게 표시해야 하는지를 Stingray 편집기에게 지시하는 필드 메타데이터가 포함됩니다.

이 데이터 설명(및 .component 리소스 유형 자체)은 내부 데이터 유형 시스템에 따라 달라집니다. 이후의 버전에서는 엔티티 및 유형 시스템의 안정성과 전반적인 유용성을 더욱 향상시켜 이 유형 시스템이 작동하는 방식, 모든 기본 유형에 대한 정보, 그 범위를 확대하여 자체적으로 사용자 정의 데이터 유형을 생성하는 방법 등에 관한 더 자세한 정보를 제공할 계획입니다.

지금으로서는 사용자 정의 구성요소 생성을 시도해보고 싶다면 기본 음영처리 환경 구성요소가 제공하는 작업 예제를 활용하는 것이 가장 좋습니다. Property Editor에서 각 음영처리 환경 구성요소에 대해 설정할 수 있는 값의 유형들을 살펴보고, 이러한 필드가 해당하는 .component 리소스에 어떻게 설정되어 있는지를 살펴보면 사용자 정의 구성요소가 동일한 유형의 데이터를 어떻게 처리하는지 이해할 수 있을 것입니다.

editor

이 섹션은 구성요소가 Stingray 편집기의 Property Editor 패널에 표시되는 방식을 구성하는 메타데이터를 제공합니다.

category

구성요소의 표시 이름입니다. 이 메타데이터는 엔티티에 추가할 수 있는 구성요소 목록과 Property Editor의 트리 뷰에 있는 엔티티 구성요소 목록에서 사용자 정의 구성요소를 식별하는 데 사용됩니다. 또한 이 구성요소를 통해 관리되는 데이터 필드를 트리 뷰에서 그룹화하는 데에도 사용됩니다.

priority

Property Editor에서 이 구성요소의 설정을 동일한 엔티티에 할당된 다른 구성요소들과 상대적으로 어떻게 배치할지 제어합니다. 우선순위가 가장 낮은 값을 가진 구성요소가 패널 위쪽에 나열됩니다.

icon

Property Editor의 트리 뷰에서 이 구성요소의 범주 이름 옆에 표시되는 아이콘을 사용자 정의합니다. 이 아이콘은 http://fontawesome.io/icons/ 페이지에 나열된 웹 응용프로그램 아이콘 중 하나의 이름을 사용합니다.

metadata

이 섹션은 구성요소에 관한 메타데이터를 제공합니다.

name

편집기는 UI의 이 이름을 사용하여 사용자 정의 구성요소 유형을 식별합니다. 모든 종류의 구성요소 사이에서 이 이름은 고유해야 하며, 그렇지 않으면 사용자가 구성요소를 구분할 수 없습니다. 다른 구성요소 이름과 충돌을 방지하는 좋은 방법은 구성요소 이름에 프로젝트 이름 또는 플러그인 이름을 포함하는 것입니다.

component

이 값은 사용자 정의 구성요소를 처리하는 데 사용할 기본 구성요소 관리자 시스템을 결정합니다. 이번 버전에서는 여기에서 항상 data를 선택해야 사용자 정의 구성요소가 데이터 구성요소로 처리됩니다.

tags

사용자 정의 구성요소 유형의 인스턴스를 식별하거나 검색하는 데 사용할 수 있는 태그 목록입니다. 현재는 음영처리 환경 구성요소를 식별하는 용도로 내부적으로만 사용됩니다. 사용자 정의 구성요소에서 shading_environment 태그를 사용자 정의 구성요소를 보다 잘 설명해주는 태그로 바꾸기만 하면 됩니다.