อินสแตนซ์ของเอนจิน

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

API ของเอนจิน Open Cloud ช่วยให้คุณจัดการวัตถุ Instance ในประสบการณ์ Roblox ของคุณจากเว็บ

ข้อจำกัดเบต้า

API เหล่านี้อยู่ในช่วงเบต้าและมีข้อจำกัดดังต่อไปนี้:

  • คุณสามารถอ่านและอัปเดตวัตถุ Script, LocalScript และ ModuleScript เท่านั้น

  • คุณไม่สามารถอัปเดตสคริปต์ที่เปิดอยู่ใน Roblox Studio

  • คุณไม่สามารถอัปเดตสคริปต์ที่เป็นส่วนหนึ่งของ แพ็คเกจ

  • คุณสามารถใช้การตรวจสอบสิทธิ์ด้วยคีย์ API เท่านั้น สร้าง API key โดยเพิ่ม universe-place-instances เข้าไปในระบบ API

    คุณต้องระบุประสบการณ์ที่คุณต้องการให้คีย์เข้าถึง รวมถึงช่วงสิทธิการอ่านและเขียนที่ต้องการ

    หน้าจอคีย์ API ของ Creator Hub

  • คุณต้องมีเซสชัน การทำงานร่วมกัน ที่เปิดใช้งานสำหรับประสบการณ์ที่คุณต้องการเข้าถึง

  • เนื้อหาของคำขอ เช่น ในการ อัปเดตอินสแตนซ์ จะถูกจำกัดไว้ที่ 200 KB

รายการลูก

รายการลูกทั้งหมดของอินสแตนซ์เฉพาะโดยระบุ ID ของอินสแตนซ์และเรียกใช้วิธี รายการเด็กของอินสแตนซ์


import requests
# สร้างที่ https://create.roblox.com/dashboard/credentials
apiKey = "<API_KEY>"
# ค้นหาที่ https://create.roblox.com/dashboard/creations ในเมนูเพิ่มเติมของไพ่ประสบการณ์
universeId = "<UNIVERSE_ID>"
# ค้นหา Start Place ID ที่ https://create.roblox.com/dashboard/creations ในเมนูเพิ่มเติมของไพ่ประสบการณ์
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("ผลลัพธ์จากการดำเนินการ:", response.status_code, response.text)
# วิเคราะห์เส้นทางของวัตถุการดำเนินการเพื่อที่จะได้รับทรัพยากร Instance ต่อไป ดูหัวข้อการ polling เพื่อดูข้อมูลเพิ่มเติม
operationPath = response.json()['path']

แทนที่จะทำการแสดงรายการเด็กเพียงอย่างเดียว การตอบสนองจะรวมถึงวัตถุ Operation ที่มีจุดสิ้นสุดที่แตกต่างกัน Poll จุดสิ้นสุดนี้ เพื่อดึงดูดรายการเด็กที่แท้จริงแบบซิงค์ การซอฟต์โค้ดตัวอย่างที่สมบูรณ์กว่านี้มีลักษณะดังนี้:


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("ผลลัพธ์จากการดำเนินการ:", response.status_code, response.text)
# วิเคราะห์เส้นทางของวัตถุทางการดำเนินการที่จะใช้ในการ polling สำหรับทรัพยากรอินสแตนซ์
operationPath = response.json()['path']
response = PollForResults(operationPath)
print("การตอบสนอง:", 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:
# ไม่พบชื่อดังกล่าว

สคริปต์มีข้อมูลเพิ่มเติมในวัตถุ Details เช่น ประเภทสคริปต์ แหล่งที่มา และว่าได้ถูกเปิดใช้งานหรือไม่

ดึงอินสแตนซ์

วิธีนี้จะส่งกลับ Instance เพียงหนึ่งรายการ


import requests
# สร้างที่ https://create.roblox.com/dashboard/credentials
apiKey = "<API_KEY>"
# ค้นหาที่ https://create.roblox.com/dashboard/creations ในเมนูเพิ่มเติมของไพ่ประสบการณ์
universeId = "<UNIVERSE_ID>"
# ค้นหา Start Place ID ที่ https://create.roblox.com/dashboard/creations ในเมนูเพิ่มเติมของไพ่ประสบการณ์
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.status_code, response.text)
# วิเคราะห์เส้นทางของวัตถุทางการดำเนินการจากการตอบสนอง ดูหัวข้อการ polling เพื่อดูข้อมูลเพิ่มเติม
operationPath = response.json()['path']

เช่นเดียวกับวิธีการแสดงรายการเด็กของอินสแตนซ์ การตอบสนองรวมถึงวัตถุ Operation ที่คุณต้องทำPolling เพื่อดึงข้อมูลอินสแตนซ์ที่แท้จริง ดู Polling สำหรับผลลัพธ์ เพื่อดูข้อมูลเพิ่มเติม

อัปเดตอินสแตนซ์

หลังจากที่คุณได้รับ ID ของอินสแตนซ์ที่เหมาะสมแล้ว คุณสามารถอัปเดตได้ ตัวอย่างเช่น Polling สำหรับผลลัพธ์ หลังจากทำการร้องขอการอัปเดตเบื้องต้น


import json
import requests
# สร้างที่ https://create.roblox.com/dashboard/credentials
apiKey = "<API_KEY>"
# ค้นหาที่ https://create.roblox.com/dashboard/creations ในเมนูเพิ่มเติมของไพ่ประสบการณ์
universeId = "<UNIVERSE_ID>"
# ค้นหา Start Place ID ที่ https://create.roblox.com/dashboard/creations ในเมนูเพิ่มเติมของไพ่ประสบการณ์
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.status_code, response.text)
# วิเคราะห์เส้นทางของวัตถุทางการดำเนินการจากการตอบสนอง ดำเนินการPolling สำหรับผลลัพธ์เพื่อตรวจสอบ
operationPath = response.json()['path']

Poll สำหรับผลลัพธ์

วิธีการ Instance ทุกวิธีการปัจจุบันจะส่งคืนวัตถุ Operation แทนทรัพยากรที่คุณร้องขอ วัตถุนี้ช่วยให้คุณสามารถดำเนินการต้นฉบับแบบอะซิงโครนัส ใช้เส้นทางของวัตถุ Operation (ที่รวมอยู่ในการตอบสนองเริ่มต้น) เพื่อทำPoll สำหรับเมื่อทรัพยากรพร้อม

คุณสามารถใช้กลยุทธ์การ polling ที่หลากหลาย เช่น การใช้การลดลงเชิงอัตราทวี หรือการรอแบบคงที่ระหว่างคำขอ ตัวอย่างต่อไปนี้จะทำPollทุกๆห้าคุณวินาทีสูงสุด 10 ครั้ง


import requests
import time
# สร้างที่ https://create.roblox.com/dashboard/credentials
apiKey = "<API_KEY>"
# ใช้เส้นทางของการดำเนินการจากคำขอเริ่มต้นของคุณ
# มีรูปแบบเป็น "universes/<UNIVERSE_ID>/places/<PLACE_ID>/instances/<INSTANCE_ID>/operations/<OPERATION_ID>"
operationPath = "<OPERATION_PATH>"
# ค่าคงที่การ polling
numberOfRetries = 10
retryPollingCadence = 5
# ค่าหัวข้อคำขอ
apiKeyHeaderKey = "x-api-key"
# URL จุดสิ้นสุดสำหรับการทำPolling ของการดำเนินการที่ใช้เวลานาน
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.status_code, response.text)

เดโมร้านขายยา

เดโมของ Google Sheets ร้านขายยาแสดงให้คุณเห็นวิธีการอัปเดตสคริปต์ของประสบการณ์จากเว็บ เดโมประกอบไปด้วยสิ่งต่อไปนี้:

  • สถานที่ที่ไม่ถูกล็อคซึ่งมี UI ตัวอย่างที่แสดงให้เห็นถึงยาและราคา
  • ไฟล์ .ods ที่คุณนำเข้าสู่ Google Sheets สเปรดชีตนี้ช่วยให้คุณสามารถระบุและอัปเดตค่าต่างๆ สำหรับคุณสมัติในประสบการณ์
  • โค้ดสำหรับ Google Apps Script ที่อ่านข้อมูลจาก Google Sheet และอัปเดต ReplicatedStorage > ItemList สคริปต์ในประสบการณ์ร้านขายยา

ตั้งค่าเดโม

  1. ไปที่ เดโมร้านขายยา หน้า Discover คลิกที่เมนูเพิ่มเติม จากนั้น แก้ไขใน Studio Studio จะเปิดด้วยสำเนาของสถานที่

  2. คลิก ไฟล์บันทึกไปยัง Roblox และกรอกข้อมูลที่จำเป็นเพื่อ บันทึกเดโมร้านขายยาเป็นสถานที่เริ่มต้นสำหรับประสบการณ์ของคุณ ทดสอบ ประสบการณ์ คุณควรเห็น UI ของเดโมร้านขายยา บันทึกชื่อ ราคา และสีของยา คุณจะเปลี่ยนพวกเขาในภายหลังด้วย Open Cloud!

ตั้งค่าแผ่นงาน

  1. ดาวน์โหลด ไฟล์สเปรดชีตร้านขายยา
  2. ไปที่ Google Sheets และคลิก แผ่นงานเปล่า
  3. ในแผ่นงานที่ปรากฏ คลิก ไฟล์ > นำเข้า และคลิกแท็บ อัปโหลด
  4. ลากไฟล์สเปรดชีต ร้านขายยาเข้าไปในหน้าต่างอัปโหลด
  5. เลือก แทนที่สเปรดชีต และแล้ว นำเข้าข้อมูล
  6. ในแท็บ AppScript ของแผ่นงาน คัดลอกโค้ดในเซลล์ A1
  7. คลิกเมนู ส่วนขยาย > Apps Script และวางโค้ดลงใน ไฟล์ Code.gs จากนั้นบันทึกโปรเจ็กต์
  8. กลับไปที่สเปรดชีต เลือกแท็บ อัปเดตร้านขายยา คลิกปุ่ม อัปเดตสคริปต์ คลิกเมนูเพิ่มเติม และเลือก กำหนดสคริปต์
  9. ในหน้าต่าง กำหนดสคริปต์ ให้ป้อน UpdateScript และคลิก ตกลง

สร้างคีย์ API

  1. ไปที่หน้า Creator Hub Open Cloud API Keys และคลิก สร้างคีย์ API

  2. กรอกแบบฟอร์มด้วยข้อมูลดังต่อไปนี้

    • ชื่อ: PotionShop
    • ระบบ API: เพิ่มระบบ API universe-place-instances เพิ่มประสบการณ์ร้านขายยาของคุณในระบบ สำหรับ ประสบการณ์การดำเนินการ ให้เพิ่มการเข้าถึงการอ่านและเขียน
    • ที่อยู่ IP ที่ยอมรับได้: เพิ่ม 0.0.0.0/0 เป็นที่อยู่ IP
    • วันหมดอายุ: ไม่มีวันหมดอายุ
    • คลิก บันทึก & สร้างคีย์ และจากนั้น คัดลอกคีย์ไปยังคลิปบอร์ด
  3. วางคีย์ API ลงในเซลล์คีย์ API (D2) บนแท็บ Intro ของ Google Sheet ของคุณ

รับ ID ของจักรวาลและสถานที่

  1. ไปที่หน้า Creator Hub Creations วางเมาส์เหนือไพ่ของประสบการณ์ร้านขายยา และคลิกที่เมนูเพิ่มเติม
  2. เลือก คัดลอก ID จักรวาล และวางลงในเซลล์ ID จักรวาล (E2) บนแท็บ Intro ของ Google Sheet ของคุณ
  3. เลือก คัดลอก ID สถานที่เริ่มต้น และวางลงในเซลล์ ID สถานที่ (F2) บนแท็บ Intro ของ Google Sheet ของคุณ

อัปเดตค่าของสคริปต์

  1. ในแท็บ อัปเดตร้านขายยา ของแผ่นงาน ปรับเปลี่ยนค่าต่างๆ ที่คุณต้องการและคลิกปุ่ม อัปเดตสคริปต์
  2. หาก Google Sheets ขอให้คุณอนุญาต ให้คลิก ตกลง และอนุญาตให้บัญชีของคุณเริ่มรันสคริปต์
  3. ใน Studio ทดลองเล่นร้านขายยาเพื่อดูการเปลี่ยนแปลงที่สะท้อนอยู่ จากหน้าต่าง Explorer คุณยังสามารถเปิดสคริปต์ ReplicatedStorage > ItemList เพื่อสำรวจการเปลี่ยนแปลงได้

ในหน้านี้