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

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

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

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

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

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

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

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

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

    คุณต้องระบุเกมที่คุณต้องการให้คีย์เข้าถึง พร้อมกับขอบเขตการอนุญาตการอ่านและการเขียนที่ต้องการ

    หน้าจอ API key ของ 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>"
# หาที่ ID ของ Start Place ที่ 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)
# แยกพาธของวัตถุ Operation เพื่อใช้ในการรับข้อมูล Resource อินสแตนซ์ ดูส่วนการ Polling for Results สำหรับข้อมูลเพิ่มเติม
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)
# แยกพาธของวัตถุ Operation เพื่อใช้ในการ poll ข้อมูล Resource อินสแตนซ์
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 เช่น ประเภทของสคริปต์ แหล่งที่มา และว่าเปิดใช้งานอยู่หรือไม่

รับอินสแตนซ์

วิธีนี้จะคืนค่า อินสแตนซ์ เดียว


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

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

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

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


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

Poll for results

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

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


import requests
import time
# สร้างที่ https://create.roblox.com/dashboard/credentials
apiKey = "<API_KEY>"
# ใช้พาธของ Operation จากคำขอเริ่มต้นของคุณ
# มีรูปแบบ "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 คลิกที่เมนูที่ล้น แล้วคลิก Edit in Studio Studio จะเปิดด้วยสำเนาของสถานที่

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

ตั้งค่าตาราง

  1. ดาวน์โหลด ไฟล์ สเปรดชีตร้านขายยา
  2. ไปที่ Google Sheets และคลิก Blank Spreadsheet
  3. ในแผ่นงานที่ปรากฏขึ้น คลิก File > Import และคลิกที่ แท็บ Upload
  4. ลากไฟล์สเปรดชีตร้านขายยาไปยังหน้าต่างการอัปโหลด
  5. เลือก Replace spreadsheet และคลิก Import data
  6. ในแท็บ AppScript ของแผ่นงาน ให้นำโค้ดในเซลล์ A1 ไปวาง
  7. คลิกที่เมนู Extensions > Apps Script และวางโค้ดลงในไฟล์ Code.gs จากนั้นบันทึกโปรเจ็กต์
  8. กลับไปที่สเปรดชีต เลือกแท็บ Update Potion Shop คลิกปุ่ม Update Script คลิกที่เมนูที่ล้นแล้วเลือก Assign script
  9. ในหน้าต่าง Assign script ให้ป้อน UpdateScript และคลิก OK

สร้าง API key

  1. ไปที่หน้า Creator Hub Open Cloud API Keys และคลิก Create API Key

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

    • Name: PotionShop
    • API System: เพิ่มระบบ API universe-place-instances เพิ่มเกมร้านขายยาของคุณไปยังระบบนี้ สำหรับ Experience Operations ให้เพิ่มการเข้าถึงการอ่านและการเขียน
    • Accepted IP Addresses: เพิ่ม 0.0.0.0/0 เป็นที่อยู่ IP
    • Expiration: ไม่มีวันหมดอายุ
    • คลิก Save & Generate Key และคลิก Copy Key to Clipboard
  3. วาง API key ในเซลล์ API Key (D2) บนแถบ Intro ของ Google Sheet ของคุณ

รับ ID เอกภพและสถานที่

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

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

  1. ในแท็บ Update Potion Shop ของแผ่นงาน ให้ปรับค่าใด ๆ ที่คุณ ต้องการและคลิกปุ่ม Update Script
  2. หาก Google Sheets ขอให้คุณอนุญาตให้คลิก OK และอนุญาตให้ บัญชีของคุณเรียกใช้สคริปต์
  3. ใน Studio เล่นเกมเพื่อดูการเปลี่ยนแปลงที่สะท้อนอยู่ จากหน้าต่าง Explorer คุณสามารถเปิดสคริปต์ ReplicatedStorage > ItemList เพื่อดูการเปลี่ยนแปลงได้
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ