상수
상수(constant)는 값이 저장되는 위치이며, 상수 값은 프로그램의 런타임 동안 변경할 수 없습니다.
상수를 생성하려면 상수의 식별자와 타입을 지정해 상수를 선언해야 하며, 상수의 값을 제공해 상수를 초기화해야 합니다.
상수를 사용하기 전에 먼저 상수를 선언해야 하며, 선언할 때는 반드시 상수를 초기화해야 합니다.
상수를 생성할 때는 다음 구문을 사용합니다.
Identifier : type = expression함수 내에서는 타입을 생략하고 상수를 선언할 수 있습니다.
Identifier := expression타입을 생략하면 상수를 초기화하는 표현식에서 상수의 타입이 추론됩니다. 타입은 상수의 사용 방법을 결정하므로 로컬 상수만 타입을 생략할 수 있습니다. 모듈 내의 상수는 해당 모듈 인터페이스의 일부분이 됩니다. 타입을 명시하지 않으면 인터페이스는 불분명해집니다.
다음 예시에서는 루프의 각 반복작업마다 랜덤 숫자를 생성해 상수 RandomNumber를 초기화합니다. 랜덤 숫자가 20보다 작아야만 루프가 중단됩니다.
loop:
Limit := 20
# For local constants, the type can be omitted.
RandomNumber : int = GetRandomNumber()
# Providing the type explicitly can make the code easier to read.
if (RandomNumber < Limit):
break루프의 반복작업마다 새 상수 RandomNumber를 생성하고 GetRandomNumber()의 결과를 해당 상수에 할당합니다.
변수
Verse에는 위에서 설명한 상수뿐만 아니라 변수(variables)도 있습니다.
변수는 상수와 유사하지만 var 키워드를 사용해 정의하며, 언제든지 변수의 값을 변경할 수 있습니다.
예를 들면 다음과 같습니다.
var MaxHealthUpgrade : int = 10위 변수는 integer 변수이며, 값이 10에서 변경될 수 있습니다.
변수를 생성할 때는 다음 구문을 사용합니다.
var Identifier : type = expression변수를 생성할 때는 타입을 반드시 명시해야 합니다.
변수를 생성한 후에는 다음 구문을 사용해 변수에 다른 값을 할당할 수 있습니다.
set Identifier = expression= 연산자 이외에도 다양한 연산자를 사용해 변수의 값을 변경할 수 있습니다. 예를 들면 다음과 같습니다.
var X:int = 0
set X += 1
set X *= 2글로벌 변수
모듈에 정의된 변수는 변수가 범위 내에 있는 실행 중인 모든 게임 인스턴스에 대해 글로벌입니다.
Verse에서 모듈 스코프 변수를 선언하는 한 가지 방법으로 키 타입이 현재 포트나이트 섬 인스턴스의 타입, 즉 session이고, 값 타입이 임의의 타입 t인 weak_map(session, t) 타입을 사용하는 것이 있습니다. weak_map에 대한 자세한 내용은 맵을 참고하세요.
다음은 ExampleFunction()이 호출될 때마다 증가되는 GlobalInt 글로벌 인티저 변수를 생성하는 예시입니다.
using { /Verse.org/Simulation } # For session
var GlobalInt:weak_map(session, int) = map{}
ExampleFunction():void=
X := if (Y := GlobalInt[GetSession()]) then Y + 1 else 0
if:
set GlobalInt[GetSession()] = X
Print("{X}")session 타입을 키로 사용하는 모듈 스코프 변수는 다음과 같은 제한이 있습니다.
다른 세션이 아닌 현재 세션의 값에만 액세스할 수 있습니다.
모듈 스코프 변수
weak_map은 완전히 읽거나 쓸 수 없으므로 모든 세션의 값을 읽거나 오버라이드할 수 없습니다.weak_map에는 길이가 없기 때문에weak_map의 값을 통해 반복작업을 하거나 현재 활성 중인 세션 수를 볼 수 없습니다.
퍼시스턴스 데이터
session과 연관된 모듈 스코프 변수를 제외하면, 모듈 스코프 변수는 현재 게임 외의 데이터를 저장하는 퍼시스턴스를 필요로 합니다.
Verse의 퍼시스턴스 변수는 weak_map(player, t) 타입을 사용하여 선언할 수 있습니다. t 로 나타내는 모든 퍼시스턴스 타입은 특정 플레이어에 대해서만 저장하고 액세스할 수 있으며, 데이터를 다음 게임 세션에 표시할 수 있습니다. 플레이어가 게임에 합류할 때마다 이전에 저장된 데이터가 weak_map(player, t) 타입의 모든 모듈 스코프 변수에 로드됩니다.
다음 예시에서 글로벌 'weak_map' 변수 MySavedPlayerData 플레이어 타입을 키로, 인티저를 값으로 사용합니다. 퍼시스턴스 데이터를 정의한 후에는 각 플레이어의 데이터를 초기화해야 합니다. 해당 플레이어에 대해 이미 저장된 데이터가 없는지 확인한 다음, 플레이어 및 초기 값을 weak_map에 추가하는 방식으로 데이터를 초기화할 수 있습니다.
using { /Fortnite.com/Devices }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Simulation }
var MySavedPlayerData:weak_map(player, int) = map{}
# A Verse-authored creative device that can be placed in a level
persistence_example := class(creative_device):
# Runs when the device is started in a running game
player 타입을 키로 사용하는 모듈 스코프 변수는 다음과 같은 제한이 있습니다.
플레이어의 퍼시스턴스 데이터에 대한 액세스는 플레이어가 현재 게임에 있을 때만 허용됩니다.
플레이어가 게임을 떠나거나 현재 세션에 있지 않은 경우, 해당 게임 세션에서 더 이상 데이터를 저장하거나 액세스할 수 없습니다. 플레이어가 돌아오거나 같은 게임을 다시 플레이하는 경우에는 데이터 액세스 및 업데이트가 가능합니다.
모듈 스코프
weak_map은 완전히 읽거나 쓸 수 없으므로 모든 플레이어의 값을 읽거나 오버라이드할 수 없습니다.weak_map에는 길이가 없기 때문에weak_map의 값을 반복작업하거나weak_map에 기록이 있는 플레이어가 몇 명인지 확인할 수 없습니다.하나의 섬에는 최대 2개의 퍼시스턴스 변수가 존재할 수 있습니다. 즉,
player가 있는 2개의weak_map변수를 키 타입으로 사용합니다.최대 퍼시스턴스 변수 한도에 도달한 경우, 최소 1개의 퍼시스턴스 변수
weak_map값이 클래스여야 합니다.단일
weak_map기록에서 최대 데이터 크기는 플레이어당 128킬로바이트(KB)입니다.
Verse의 퍼시스턴스에 대한 자세한 내용은 Verse에서 퍼시스턴스 데이터 사용하기를 확인하세요.