ความสามารถของสคริปต์

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

คุณสมบัติสคริปต์เป็นระบบที่เสนอการควบคุมการดำเนินการที่สคริปต์สามารถดำเนินการภายใน DataModel ต้นไม้

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

เปิดใช้งานคุณสมบัติของสคริปต์

เพื่อเปิดใช้งานคุณสมบัตินี้ เปลี่ยนการตั้งค่า SandboxedInstanceMode จาก Default เป็น Experimental ใน Explorer

เมื่อการทดสอบเบต้าของลูกค้าเสร็จสิ้นแล้วขั้นตอนนี้จะไม่มีอีกต่อไป

คอนเทนเนอร์ที่มีทราย

ระบบนี้แนะนำแนวคิดของ คอนเทนเนอร์ทราย หนึ่ง ตัวอย่างของประเภท Model ، Folder 、 1>

Sandboxed property of a Folder in the Properties window.

การเปิดใช้งานสมบัติสมบัติ Sandboxed จะระบุว่าตัวอินสแตนซ์เป็นคอนเทนเนอร์ทรายที่อยู่ภายในต้นไม้ DataModel ซึ่งจำกัดการดำเนิน

ความสามารถ

คุณสมบัติ Capabilities คือชุดของค่าที่ควบคุมด้านต่างๆ ของการประมวลผล แบ่งออกเป็นสี่กลุ่ม:

  • การควบคุมการประมวลผล - ระบุว่าสคริปต์สามารถดำเนินการได้บนลูกค้าหรือเซิร์ฟเวอร์หรือไม่
  • การควบคุมการเข้าถึงตัวอินสแตนซ์ - ระบุว่าสคริปต์สามารถใช้งานได้กับชิ้นส่วน DataModel ตัวใด
  • การควบคุมความสามารถของสคริปต์ - ระบุว่าสคริปต์ Luau สามารถเรียกได้
  • การควบคุมการเข้าถึง API ของเครื่องยนต์ - ระบุว่าส่วนใดของ Roblox Engine API สามารถใช้ได้

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


The current thread cannot modify 'Workspace' (lacking capability AccessOutsideWrite)
The current thread cannot call 'Clone' (lacking capability CreateInstances)
The current thread cannot call 'GetSecret' (lacking capability Network)

การควบคุมการประมวลผล

ชุดนี้รวมถึงความสามารถสองประการ:

  • วิดีโอเกมที่ให้คุณเล่นเกมได้อย่างเต็มรูปแบบโดยใช้เวลาเพียงไม่กี่วินาทีเท่านั้น - LocalScript หรือ Script ด้วยมูลค่า 0> Class.BaseScript.RunContext
  • วิดีโอสคริปต์เว็บไซต์ของ RunServerScript - Script ด้วยมูลค่า RunContext ของ 0> 枚.RunContext.Server|Server0> สามารถดำเนินการบนเซิร์ฟเวอร์ได้

หากสคริปต์เป็น Enabled แต่คุณสมบัติที่เกี่ยวข้องกับสถานที่ที่มันพยายามจะเริ่มในไม่สามารถใช้งานได้ ข้อความเตือนจะปรากฏในหน้า การออก หากสคริปต์

หมายเหตุว่า ModuleScripts ไม่จำเป็นต้องมีความสามารถในการประมวลผลเหล่านี้เพื่อให้ต้องการ

เมื่อสคริปต์ไม่สามารถเริ่มได้เนื่องจากความสามารถในการควบคุมการประมวลผลหายไป มันจะถูกรายงานเป็นคำเตือนในออกมา เช่น:


Cannot start server script 'Script' (lacking capability RunServerScript)

การควบคุมการเข้าถึงติดตั้ง

ชุดนี้รวมถึงความสามารถเดียวเท่านั้น:

  • เข้าถึงข้างนอกเขียน - สคริปต์สามารถดึงและรับตัวอย่างจากด้านนอกของคอนเทนเนอร์ที่แสงนำทางได้

เมื่อความสามารถไม่มีความพร้อมให้ใช้สคริปต์สามารถมองขึ้นได้เฉพาะตัวอย่างที่อยู่ภายในคอนเทนเนอร์ของตัวเอง เช่น หากสคริปต์ถูกวางโดยตรงในคอนเทนเนอร์ของตัวเอง script.Parent.Parent

นอกจากนี้ยังมีการเหตุการณ์ที่ผ่านใน Instance แทนที่จะผ่านใน nil สำหรับใด ๆ Instance ภายนอกตัวอัก

หลีกเลี่ยงการตั้งค่าความสามารถนี้; การทดสอบในแซนด์บ็อกซ์มีประสิทธิภาพน้อยลงเมื่อสคริปต์สามารถใช้งานได้กับอินสแตนซ์ใด ๆ ในประสบการณ์

เข้าถึงบริการ

แม้ว่าจะไม่มี AccessOutsideWrite สคริปในคอนเทนเนอร์ทราบแล้วก็ยังสามารถเข้าถึงได้ที่ game และ workspace และบริการ การเข้าถึงนี้ให้ไว้เพื่อใ

ผ่านด้านใน Instances

หากคำสั่งโค้ดผ่านผ่านฟังก์ชันที่ไม่ผ่าน Roblox APIs จะเก็บไว้ อย่างไรก็ตามหาก ModuleScript ถูกผ่านในวิธีนี้จะไม่สามารถต้องการได้โดย

ควบคุมความสามารถของสคริปต์

ชุดควบคุมความสามารถนี้ควบคุมแง่งทั่วไปของสคริปต์:

  • AssetRequire - สคริปต์สามารถโทรได้ว่า require ด้วยรหัสสินทรัพย์
  • LoadString - สคริปต์สามารถโหลดได้ loadstring
  • ScriptGlobals - สคริปมี shared และ _G พร้อมให้ใช้งาน
  • สร้างตัวอินสแตน스์ใหม่ - สคริปต์สามารถสร้างตัวอินสแตนส์ใหม่โดยใช้ Instance.new ، Instance.fromExisting หรือ 0> Class.Instance:Clone0>

ตรวจสอบให้แน่ใจว่าข้อจำกัดการใช้งานฟังก์ชันเริ่มต้นยังคงมีผล แม้ว่า LoadString จะเปิดใช้งานได้ ประสบการณ์ยังคงต้องเปิดให้ใช้ใน ServerScriptService เท่านั้นและยังไม่สามารถใช้งานได้บนเซ

เพื่อสร้างริ้วิวใหม่ นอกจาก สร้างริ้วิว ความสามารถของ Engine API เพิ่มเติมที่ให้การเข้าถึงริ้วิวนั้นจำเป็น

การควบคุมการเข้าถึง API ของเครื่องยนต์

กลุ่มความสามารถล่าสุดนี้ควบคุมการเข้าถึงสคริปต์สู่ต่างๆ API ของเครื่องมือ:

  • พื้นฐาน - เข้าถึงตัวอย่างง่ายและบล็อกก่อสร้างที่จำเป็น
  • เสียง - เข้าถึงตัวอินสแตนซ์ที่เกี่ยวข้องกับ API เสียง
  • ห้องเก็บข้อมูล - เข้าถึงห้องเก็บข้อมูลและ API ห้องเก็บความจำ
  • เครือข่าย - เข้าถึง API เครือข่าย HTTP
  • ฟิสิกส์ - เข้าถึงตัวอย่างที่เกี่ยวข้องกับฟิสิกส์
  • UI - เข้าถึงตัวอย่างที่เกี่ยวข้องกับผู้ใช้
  • CSG : เข้าถึงตัวอย่างและการใช้งานที่เกี่ยวข้องกับเรื่องความงามของตัวอย่าง (CSG)
  • การแชท : เข้าถึงตัวอินสแตนซ์ที่เกี่ยวข้องกับการแชทในประสบการณ์
  • อนิเมชั่น : เข้าถึงตัวอย่างที่เกี่ยวข้องกับอนิเมชั่น
  • Avatar : เข้าถึงตัวอินสแตนซ์ที่เกี่ยวข้องกับอวาตาร์
  • การป้อนข้อมูล : การเข้าถึงตัวอย่างที่เกี่ยวข้องกับการป้อนข้อมูลของผู้ใช้
  • สภาพแวดล้อม : 액세สสู่ตัวอย่างที่เกี่ยวข้องกับการควบคุมวิธีการแสดงผลสภาพแวดล้อม
  • RemoteEvent : เข้าถึงตัวอินสแตนซ์สำหรับการดำเนินการเครือข่ายภายใน

นอกจากนี้ยังมีตัวอย่างที่สามารถใช้งานได้โดยไม่มีความสามารถใด ๆ นอกจากการประมวลผลสคริปต์ได้ ซึ่งรวมถึงวิธีการต่อไปนี้ HttpService วิธี

หากเข้าถึงสมบัติของตัวอินสแตนซ์หรือวิธีการโดยไม่มีความสามารถที่ต้องการ จะมีข้อผิดพลาดที่อธิบายความสามารถที่ขาดหาย

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

ข้อจํากัดเพิ่มเติมคือ getfenv และ setfenv ไม่สามารถใช้งานได้สําหรับสคริปในคอนเทนเนอร์ที่มีการรีแมทช์

การเข้าถึงสคริปต์ของสินค้าเท่านั้นจำกัด สินค้าเองยังสามารถมีอยู่และดำเนินการโดยตัวเองภายในคอนเทนเนอร์ที่แสดงผล แสงยังคงประกายอยู่ ระบบอินเทอร์เฟซผู้ใช้ยังคงมองเห็นได้ และการตั้งค่าเส

การจัดการงาน API ของเครื่อง

นี่คือรายการของอินสแตนซ์และวิธีการ (หากแตกต่างจากความสามารถของอินสแตนซ์) สำหรับแต่ละความสามารถของ API ของเครื่อง:

การโต้ตอบระหว่างคอนเทนเนอร์

คอนเทนเนอร์ที่เหมาะกับ

เมื่อคอนเทนเนอร์หนึ่งถูกนำมาใช้ในคอนเทนเนอร์อื่น ๆ คอนเทนเนอร์ด้านในสามารถเข้าถึงได้จากคอนเทนเนอร์ด้านนอก

ความสามารถของคอนเทนเนอร์ภายในจำกัดโดยความสามารถของคอนเทนเนอร์ภายนอก เช่น หากคอนเทนเนอร์ภายนอกมีความสามารถของ พื้นฐาน และ <

หากไม่มีความสามารถระหว่างคอนเทนเนอร์ภายในและภายนอก ชุดความสามารถที่ตรงกันจะว่างเปล่า

รุ่นฟังก์ชันและเหตุการณ์ที่ผูกได้

BindableEvent และ BindableFunction ให้วิธีการสื่อสารที่ดีที่สุดกับคอนเทนเนอร์หรือสามารถให้เรียกคืนกับความสามารถที่ตัวเองไม่สามารถใช้ได้โดยตรง

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

มีความสำคัญที่จะทราบว่าแม้ว่า AccessOutsideWrite ความสามารถ สคริปในคอนเทนเนอร์ที่มีความสามารถใหญ่กว่าคอนเทนเนอร์จะไม่สามารถเรียกเหตุการณ์หรือฟังก์ชันนอกคอนเทนเนอร์ได้หากพวกเขามีความสามารถตั้

ต้องการโมดูล

Inner ModuleScripts สามารถต้องการได้โดยคอนเทนเนอร์ที่มีการแสดงผลภายใน หากเป้าหมายอยู่นอกคอนเทนเนอร์ ModuleScript สามารถต้องการได้เฉพาะการตั้งค่าความส

ข้อจํากัดนี้ไม่ใช้กับความสามารถ วิดีโอสคริปต์ผู้ใช้ และ วิดีโอสคริปต์เซิร์ฟเวอร์ หาก ModuleScript ถูกวางในคอนเทนเนอ

เรียกฟังก์ชันโดยตรง

หากต้องการ ModuleScript ในคอนเทนเนอร์ที่มีการรีติร์นจากภายนอกคอนเทนเนอร์บางส่วนของการป้องกันไม่สามารถใช้งานได้ โดยเฉพาะอย่างยิ่งตัวเป้าหมายสามา

ความจํากัดความสามารถอื่น ๆ ยังคงมีอยู่ หากคุณมีความสามารถเก็บข้อมูล DataStore คุณจะไม่สามารถเรียกวิธี Class.Data

สามารถส่งตัวอินสแตนซ์ไปยังโมดูลเป้าหมายหรือกำหนดให้ตัวอินสแตนซ์ในแถวของโมดูล

หากต้องการ จะแนะนำให้กำหนดสมาชิกตารางโดยใช้ rawset เพื่อหลีกเลี่ยงการดำเนินการ __index / __newindex มีมีเมทีเฟรมที่อาจจะติดตั้งบนตาราง

คำแนะนำทั่วไปคือการสื่อสารกับ BindableEvent และ BindableFunction เมื่อเป็นไปได้

การเคลื่อนที่ของตัวอย่าง

ส่วนใหญ่ของการติดตั้งไม่มีข้อจํากัดในการเคลื่อนที่ระหว่างคอนเทนเนอร์ อย่างไรก็ตาม สคริปต์ได้รับการสนับสนุนสําหรับการเคลื่อนที่เฉพาะคอนเทนเนอร์เท่านั้น

นี่หมายถึงว่าคอนเทนเนอร์ทราบทรัพย์ที่มี AccessOutsideWrite ไม่สามารถเพียงแค่รีพ่อคอนเทนเนอร์ภายในตัวเองได้เพื่อด้านนอกและรับความสามารถมากขึ้น