리소스 패키지 정의

확장자가 .package인 SJSON 파일에서 게임에 로드할 각 리소스 패키지를 정의합니다. 각 패키지 파일에는 오브젝트 목록이 포함되어 있습니다. 여기서 각 오브젝트의 키는 리소스 유형이고 각 오브젝트의 값은 리소스 이름 목록입니다.

예:

level = [
    "levels/city"
    "levels/town"
]

lua = [
    "lua/boot"
    "lua/game"
    "lua/freeflight"
    "lua/thread"
]

각 리소스 목록은 특정 유형의 리소스만 참조하므로 개별 리소스는 파일 확장자 없이 나열됩니다. 예를 들어 위에 나온 스니펫에서 Stingray는 levels/city 리소스는 level 목록에 지정되어 있으므로 디스크의 levels/city.level 파일을 참조합니다.

다른 유형의 리소스와 마찬가지로 패키지 파일은 프로젝트 소스 폴더 어디에든 위치할 수 있습니다. 지정하는 모든 리소스 이름은 항상 .package 파일의 위치가 아닌 프로젝트 루트를 기준으로 해야 합니다.

종속성 처리

Stingray는 패키지에 정의된 리소스를 로드할 때마다 자동으로 리소스가 참조하는 다른 모든 리소스를 로드합니다. 그래서 예를 들어, levels/city 리소스를 로드하면 Stingray 편집기의 수준에 위치한 모든 유닛 및 텍스처도 자동으로 로드하게 됩니다.

참고: 자동 종속성 추적은 로드되는 리소스에 명시적으로 기록된 종속성에만 적용됩니다. 여기에는 Lua 스크립트에서만 참조되는 리소스가 포함되지 않습니다. 예를 들어 Lua 코드에서 수준에 아직 위치하지 않는 새로운 종류의 유닛을 생성할 필요가 있는 경우 해당 유닛 리소스를 패키지 정의 중 하나에 추가해야 런타임 시에 리소스를 사용할 수 있습니다.

와일드카드 사용

문자의 문자열과 일치되도록 패키지 파일에서 와일드카드 * 문자를 사용할 수 있습니다. 각 리소스 이름 또는 리소스 유형에서 최대 한 번 포함할 수 있습니다.

리소스 이름에서 와일드카드 사용

리소스 이름을 정의하는 곳마다 와일드카드를 사용할 수 있습니다. 예:

level = ["levels/jungle/*"]

이 패키지를 로드할 때 이 행 때문에 levels/jungle 폴더에 있는 모든 수준이 로드됩니다. (이러한 수준에 사용되는 다른 모든 컨텐츠도 로드됩니다.)

이 접근 방법은 모든 Lua 스크립트를 부팅 패키지의 게임으로 불러올 때 사용됩니다. 이러한 스크립트는 크기가 작은 경향이 있고 게임에서 필요한 경우가 많기 때문입니다.

lua = ["*"]

리소스 유형에서 와일드카드 사용

리소스 유형을 지정할 때도 와일드카드를 사용할 수 있습니다. 예:

* = ["*"]

이 스니펫을 사용하면 이 패키지를 로드할 때 소스 디렉토리 중 어느 위치에 있든 모든 유형의 모든 리소스가 메모리로 로드됩니다.

부팅 패키지에 이 행을 넣으면 리소스가 패키지에 어떻게 배포되는지에 대한 걱정 없이 빠르게 준비하고 실행하는 데 유용합니다. 하지만 게임이 커지면서 한 번에 모두를 로드하게 되면 부트 시간이 점점 더 느려지고 결국에는 게임에서 메모리가 부족해지게 됩니다(특히 모바일 폰과 같이 가용 메모리가 적은 플랫의 경우).

특수 키

리소스 목록 외에 패키지 파일에는 다음과 같은 특수 키가 포함될 수 있습니다. 각 키는 각 패키지 파일에서 한 번만 나타납니다.

IGNORE_DEPENDENCIES = <boolean>

이 플래그는 Stingray가 이 패키지에 나열된 리소스에서 사용하는 리소스의 로드 여부를 정합니다. 위의 종속성 처리를 참조하십시오. 이 옵션을 true로 설정하면 이 파일에 명시적으로 나열된 리소스만 불러옵니다.

ADD_PACKAGES = []

이 키 값에 .package 리소스를 나열하면 해당 패키지에 나열된 모든 리소스가 자동으로 현재 패키지에 추가됩니다.

SUBTRACT_PACKAGES = []

이 키 값에 *package 리소스를 나열하면 해당 패키지에 나열된 모든 리소스가 현재 패키지에서 제거됩니다.

이는 모든 수준에서 사용되는 리소스를 포함한 일반 패키지를 설정하려는 경우 유용합니다. 각 수준 패키지에서 해당 패키지를 뺄 수 있습니다. 일반 리소스는 항상 로드되므로 개별 패키지에 포함될 필요가 없습니다.

BUNDLE = <boolean>

이 값을 false로 설정하면 이 패키지에서 번들이 생성되지 않습니다. 이는 구성 목적(예: SUBTRACT_PACKAGE 설정과 함께 사용할 목적)으로만 패키지를 정의하고 게임에서 독립적으로 사용할 필요가 없는 경우 유용합니다.