엔진 인스턴스

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

엔진 오픈 클라우드 API를 사용하면 웹에서 Roblox 경험의 개체를 Instance

베타 제한

이 API는 현재 베타 상태이며 다음과 같은 제한이 있습니다:

  • 읽고 업데이트할 수 있는 개체는 Script , LocalScript , 및 ModuleScript 개뿐입니다.

  • Roblox Studio에서 현재 열려 있는 스크립트는 업데이트할 수 없습니다.

  • 패키지의 일부인 스크립트는 업데이트할 수 없습니다 패키지.

  • API 키 인증만 사용할 수 있습니다. API 시스템으로 추가된 유니버스 장소 인스턴스API 키 를 사용하여 API 키를 생성합니다.

    키가 액세스할 수 있는 경험과 원하는 읽기 및 쓰기 권한 범위를 지정해야 합니다.

  • 액세스하려는 경험에 대해 공동 작업 세션을 활성화해야 합니다.

  • 요청 본문, 예를 들어 인스턴스 업데이트에 대한 요청은 200KB로 제한됩니다.

자식 목록 표시

인스턴스 ID를 지정하고 인스턴스 자식 목록 메서드를 호출하여 특정 인스턴스의 모든 자식을 나열합니다.


import requests
# https://create.roblox.com/ashboard/credentials에서 생성
apiKey = "<API_KEY>"
# 경험 타일의 오버플로 메뉴에서 https://create.roblox.com/dashboard/creations에서 찾으세요
universeId = "<UNIVERSE_ID>"
# 경험 타일의 오버플로 메뉴에서 https://create.roblox.com/dashboard/creations에서 시작 장소 ID 찾기 Find Start Place ID at https://create.roblox.com/dashboard/creations in the overflow menu of an experience tile
placeId = "<PLACE_ID>"
# 모든 플레이스데이터 모델 루트의 기본 ID
instanceId = "root"
# 요청 헤더
apiKeyHeaderKey = "x-api-key"
# 리스트 자식 메서드의 끝점 URL
listChildrenUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s:listChildren"
def ListChildren():
url = listChildrenUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
response = ListChildren()
print("Operation Results:", response.status_code, response.text)
# 작업 개체의 경로를 분석하여 나중에 인스턴스 리소스를 얻습니다. 결과 조사 섹션에 대한 자세한 내용은 참조하십시오.
operationPath = response.json()['path']

단순히 자식을 나열하는 대신, 응답에는 다른 끝점을 가진 Operation 개체가 포함됩니다.이 끝점을 조사하여 비동기적으로 실제 자식 목록을 검색합니다.더 완전한 코드 샘플은 다음과 같습니다:


import requests
import time
apiKey = "<API_KEY>"
universeId = "<UNIVERSE_ID>"
placeId = "<PLACE_ID>"
instanceId = "root"
apiKeyHeaderKey = "x-api-key"
listChildrenUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s:listChildren"
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
numberOfRetries = 10
retryPollingCadence = 5
doneJSONKey = "done"
def ListChildren():
url = listChildrenUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def GetOperation(operationPath):
url = getOperationUrl % (operationPath)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def PollForResults(operationPath):
currentRetries = 0
while (currentRetries < numberOfRetries):
time.sleep(retryPollingCadence)
results = GetOperation(operationPath)
currentRetries += 1
if (results.status_code != 200 or results.json()[doneJSONKey]):
return results
response = ListChildren()
print("Operation Results:", response.status_code, response.text)
# 인스턴스 리소스에 대한 폴링에 사용할 작업 개체의 경로를 분석합니다. Parse the Operation object's path to use in polling for the instance resource.
operationPath = response.json()['path']
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)

최종 응답은 다음과 같이 보일 수 있습니다:


{
"path": "universes/1234567890/places/98765432109/instances/root/operations/a1a2a3a4-a1a2-a1a2-a1a2-a1a2a3a4a5a6",
"done": true,
"response": {
"@type": "type.googleapis.com/roblox.open_cloud.cloud.v2.ListInstanceChildrenResponse",
"instances": [
{
"path": "universes/1234567890/places/98765432109/instances/b1b2b3b4-b1b2-b1b2-b1b2-b1b2b3b4b5b6",
"hasChildren": true,
"engineInstance": {
"Id": "b1b2b3b4-b1b2-b1b2-b1b2-b1b2b3b4b5b6",
"Parent": "a1a2a3a4-a1a2-a1a2-a1a2-a1a2a3a4a5a6",
"Name": "Workspace",
"Details": {}
}
},
...
]
}
}

그런 다음 JSON을 반복하여 특정 인스턴스 ID를 찾을 수 있습니다:


instances = response.json()['response']['instances']
replicatedStorageId = ""
for i in instances:
if i['engineInstance']['Name'] == "ReplicatedStorage":
replicatedStorageId = i['engineInstance']['Id']
if replicatedStorageId:
# 이제 인스턴스 ID가 있으며 가져오거나 업데이트할 수 있습니다.
else:
# The name wasn't found.

스크립트에는 스크립트 입력, 소스 및 활성화 여부와 같은 Details 개체에 추가 정보가 포함되어 있습니다.

인스턴스 가져오기

이 메서드는 단일 인스턴스를 반환합니다.


import requests
# https://create.roblox.com/ashboard/credentials에서 생성
apiKey = "<API_KEY>"
# 경험 타일의 오버플로 메뉴에서 https://create.roblox.com/dashboard/creations에서 찾으세요
universeId = "<UNIVERSE_ID>"
# 경험 타일의 오버플로 메뉴에서 https://create.roblox.com/dashboard/creations에서 시작 장소 ID 찾기 Find Start Place ID at https://create.roblox.com/dashboard/creations in the overflow menu of an experience tile
placeId = "<PLACE_ID>"
# 모든 플레이스데이터 모델 루트의 기본 ID
instanceId = "<INSTANCE_ID>"
# 요청 헤더
apiKeyHeaderKey = "x-api-key"
# 인스턴스 가져오기 메서드의 끝점 URL
getInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
def GetInstance():
url = getInstanceUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
return requests.get(url, headers = headerData)
response = GetInstance()
print("Response:", response.status_code, response.text)
# 응답에서 작업 개체의 경로를 분석합니다. 결과 조사 섹션에 자세한 내용이 있습니다.
operationPath = response.json()['path']

목록 인스턴스 자식 메서드와 마찬가지로 응답에는 실제 인스턴스를 검색하기 위해 폴링하는 Operation 개체가 포함됩니다.자세한 내용은 결과에 대한 투표를 참조하십시오.

인스턴스 업데이트

적절한 인스턴스 ID를 얻은 후에는 업데이트할 수 있습니다. 최초 업데이트 요청 후 결과 조사 초기 업데이트 요청 후에 수행합니다.


import json
import requests
# https://create.roblox.com/ashboard/credentials에서 생성
apiKey = "<API_KEY>"
# 경험 타일의 오버플로 메뉴에서 https://create.roblox.com/dashboard/creations에서 찾으세요
universeId = "<UNIVERSE_ID>"
# 경험 타일의 오버플로 메뉴에서 https://create.roblox.com/dashboard/creations에서 시작 장소 ID 찾기 Find Start Place ID at https://create.roblox.com/dashboard/creations in the overflow menu of an experience tile
placeId = "<PLACE_ID>"
instanceId = "<INSTANCE_ID>"
instanceType = ""
propertyName = ""
propertyValue = ""
# 요청 헤더
apiKeyHeaderKey = "x-api-key"
contentTypeHeaderKey = "Content-type"
contentTypeHeaderValue = "application/json"
# 업데이트 인스턴스 메서드의 끝점 URL
updateInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
# JSON 키
detailsJSONKey = "Details"
engineInstanceJSONKey = "engineInstance"
def GeneratePostData():
propertiesDict = {propertyName: propertyValue}
detailsDict = {instanceType: propertiesDict}
instanceDict = {detailsJSONKey: detailsDict}
outerDict = {engineInstanceJSONKey: instanceDict}
return json.dumps(outerDict)
def UpdateInstance(postData):
url = updateInstanceUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey,
contentTypeHeaderKey: contentTypeHeaderValue}
return requests.patch(url, headers = headerData, data = postData)
postData = GeneratePostData()
response = UpdateInstance(postData)
print("Response:", response.status_code, response.text)
# 응답에서 작업 개체의 경로를 분석하고 수행할 결과를 조사합니다
# 업데이트.
operationPath = response.json()['path']

결과 조사

현재의 모든 인스턴스 메서드는 요청한 리소스 대신 Operation 개체를 반환합니다.이 개체를 사용하면 원래 작업을 비동기적으로 수행할 수 있습니다.Operation 개체의 경로(초기 응답에 포함)를 사용하여 리소스가 준비되는 시기를 조사합니다.

지수 백오프 또는 요청 사이에 고정된 지연과 같은 다양한 조사 전략을 사용할 수 있습니다.다음 예제에서는 5초마다, 최대 10회 폴링합니다.


import requests
import time
# https://create.roblox.com/ashboard/credentials에서 생성
apiKey = "<API_KEY>"
# 처음 요청에서 작업 경로 사용
# 형식은 "우주/<UNIVERSE_ID>/장소/<PLACE_ID>/인스턴스/<INSTANCE_ID>/작업/<OPERATION_ID>"입니다.
operationPath = "<OPERATION_PATH>"
# 투표 상수
numberOfRetries = 10
retryPollingCadence = 5
# 요청 헤더
apiKeyHeaderKey = "x-api-key"
# 장기 실행 작업 조사용 엔드포인트 URL
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
# JSON 키
doneJSONKey = "done"
def GetOperation(operationPath):
url = getOperationUrl % (operationPath)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def PollForResults(operationPath):
currentRetries = 0
while (currentRetries < numberOfRetries):
time.sleep(retryPollingCadence)
results = GetOperation(operationPath)
currentRetries += 1
if (results.status_code != 200 or results.json()[doneJSONKey]):
return results
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)

포션 상점 데모

포션 상점 Google 시트 데모는 웹에서 경험의 스크립트를 업데이트하는 방법을 보여줍니다. 데모에는 팔로잉포함됩니다.

  • 다양한 물약과 가격을 표시하는 가짜 UI가 있는 복사 잠금 해제된 장소.
  • Google 시트에 가져온 .ods. 이 스프레드시트를 사용하면 경험 내의 속성에 대한 값을 지정하고 업데이트할 수 있습니다.
  • Google 시트에서 데이터를 읽고 Potion Shop 경험에서 ReplicatedStorage > ItemList 스크립트를 업데이트하는 Google Apps 스크립트의 코드.

데모 설정

  1. 포션 상점 데모 발견 페이지로 이동합니다.오버플로 메뉴를 클릭한 다음 Studio에서 편집 을 클릭합니다.스튜디오가 장소의 복사본으로 열립니다.

  2. 클릭 파일Roblox에 저장 및 경험의 기본 장소로 포션 상점 데모를 저장하기 위한 필요한 정보를 채우십시오.경험을 테스트하십시오.포션 상점 데모의 UI를 볼 수 있어야 합니다.물약의 이름, 비용 및 색상을 기록하십시오.Open Cloud를 사용하여 나중에 변경할 수 있습니다!

시트 설정

  1. Google 시트로 이동하고 빈 스프레드시트 를 클릭합니다.
  2. 나타나는 시트에서 파일 > 가져오기 를 클릭하고 업로드 탭을 클릭하십시오.
  3. 포션 상점 스프레드시트 파일을 업로드 창에 끌어옵니다.
  4. 스프레드시트 대체 를 선택한 다음 데이터 가져오기 를 선택합니다.
  5. 시트의 AppScript 탭에서 A1 셀의 코드를 복사합니다.
  6. 클릭하십시오 확장 > 앱 스크립트 메뉴 및 코드를 Code.gs. 그런 다음 프로젝트를 저장하십시오.
  7. 스프레드시트로 돌아가 업데이트 물약 상점 탭을 선택합니다.클릭하십시오 업데이트 스크립트 버튼, 오버플로 메뉴를 클릭하고 스크립트 할당 을 선택합니다.
  8. 스크립트 할당 창에서 UpdateScript을 하고 확인 을 클릭하십시오.

API 키 생성

  1. 크리에이터 허브 오픈 클라우드 API 키 페이지로 이동하고 API 키 생성 을 클릭하십시오.

  2. 다음 정보로 양식을 채우십시오.

    • 이름 : PotionShop
    • API 시스템 : 유니버스 장소 인스턴스 API 시스템을 추가합니다.포션 상점 경험을 시스템에 추가합니다.경험 작업의 경우 읽기 및 쓰기 액세스를 추가 .
    • 승인된 IP 주소 : 0.0.0.0/0을 IP 주소로 추가
    • 만료 : 만료 없음
    • 클릭 저장 및 키 생성 및 그런 다음 클립보드에 키 복사 .
  3. Google 시트의 소개 탭에 API 키 셀(D2)에 API 키를 붙여넣습니다.

우주와 장소 ID 받기

  1. 크리에이터 허브 창작품 페이지로 이동하고, 포션 상점의 경험 타일 위로 마우스를 이동하고, 오버플로 메뉴를 클릭하십시오.
  2. 선택 유니버스 ID 복사 및 구글 시트의 소개 탭의 유니버스 ID 셀에 붙여넣습니다(E2).
  3. 선택 복사 시작 장소 ID 를 선택하고 Google 시트의 소개 탭에 있는 장소 ID 셀(F2)에 붙여넣습니다.

스크립트 값 업데이트

  1. 시트의 업데이트 물약 상점 탭에서 원하는 값을 수정하고 업데이트 스크립트 버튼을 클릭하십시오.
  2. Google 시트가 승인을 요청하면 확인 을 클릭하고 계정이 스크립트를 실행할 수 있도록 허용합니다.
  3. Studio에서 포션 상점을 플레이테스트하여 반영된 변경 사항을 확인하세요.탐색기 창에서 ReplicatedStorage > ItemList 스크립트를 열어 변경 사항을 검사할 수도 있습니다.