สำหรับนักพัฒนาหลายคน ความท้าทายพื้นฐานในการปรับให้เข้ากับการเขียนสคริปต์ใน Roblox คือความสำคัญของตำแหน่งของไฟล์และคุณสมบัติ Script.RunContext ขึ้นอยู่กับประเภทของสคริปต์, ตำแหน่งใน Explorer, และบริบทการทำงาน สคริปต์สามารถมีพฤติกรรมที่แตกต่างกันได้ บางครั้งการเรียกใช้วิธีอาจล้มเหลว, วัตถุในเกมของคุณอาจไม่สามารถเข้าถึงได้, หรือสคริปต์อาจไม่ทำงานเลย
สาเหตุของความซับซ้อนนี้คือเกม Roblox เป็นเกมแบบผู้เล่นหลายคนเป็นค่าเริ่มต้น สคริปต์ต้องสามารถทำงานได้เฉพาะบนเซิร์ฟเวอร์, ทำงานได้เฉพาะบนไคลเอนต์, หรือแบ่งปันกันได้ระหว่างทั้งสองฝ่าย การพัฒนาของแพลตฟอร์ม Roblox ตลอดระยะเวลานี้ได้ทำให้สถานการณ์ซับซ้อนยิ่งขึ้น
ประเภทของสคริปต์
Roblox มีสคริปต์อยู่สามประเภท:
- Script - โค้ดที่ทำงานได้ทั้งบนเซิร์ฟเวอร์หรือไคลเอนต์ ขึ้นอยู่กับตำแหน่งและคุณสมบัติ Script.RunContext
- LocalScript - โค้ดที่ทำงานได้เฉพาะบนไคลเอนต์ ไม่มีบริบทการทำงาน
- ModuleScript - โค้ดที่คุณสามารถนำกลับมาใช้ใหม่ในสคริปต์อื่นๆ ไม่มีบริบทการทำงาน
เมื่อคุณสร้าง Script บริบทการทำงานเริ่มต้นของมันคือ Legacy หมายความว่า a) เป็นสคริปต์ฝั่งเซิร์ฟเวอร์ และ b) จะทำงานได้ก็ต่อเมื่ออยู่ในคอนเทนเนอร์เซิร์ฟเวอร์ เช่น Workspace หรือ ServerScriptService
- หากคุณเปลี่ยนบริบทการทำงานของสคริปต์เป็น Server มันจะสามารถทำงานได้ใน ReplicatedStorage แต่ไม่แนะนำให้ทำ สินค้าในตำแหน่งนั้นจะถูกทำซ้ำไปยังไคลเอนต์ ดังนั้นมันจึงไม่ใช่สถานที่ที่ดีสำหรับสคริปต์ฝั่งเซิร์ฟเวอร์
- หากคุณเปลี่ยนบริบทการทำงานของสคริปต์เป็น Client มันจะสามารถทำงานได้ใน ReplicatedStorage นอกจากนี้ยังสามารถทำงานได้ใน StarterCharacterScripts และ StarterPlayerScripts แต่คอนเทนเนอร์เริ่มต้นจะแสดงให้เห็นว่าสคริปต์ดั้งเดิม และ สำเนาของมันทำงาน ซึ่งไม่เป็นที่ต้องการ
ในการเปลี่ยนบริบทการทำงานของสคริปต์ ให้เลือกมันใน Explorer และเปลี่ยนค่าในหน้าต่าง Properties

คำแนะนำ
ใส่สคริปต์ไคลเอนต์ลงใน ReplicatedStorage ด้วย RunContext ของ Client ควบคู่ไปกับ ModuleScripts ที่ใช้เฉพาะไคลเอนต์
เมื่อทำการตรวจสอบข้อผิดพลาดใน Studio คุณสามารถคลิกที่บรรทัดในหน้าต่าง Output และไปที่ ReplicatedStorage.YourScript (ตำแหน่งที่มั่นคงของสคริปต์) แทนที่จะเป็น Players.YourName.PlayerScripts.YourScript (ตำแหน่งชั่วคราวที่สคริปต์ถูกคัดลอกไปในระหว่างการทำงาน)
ใส่สคริปต์เซิร์ฟเวอร์ลงใน ServerScriptService ด้วย RunContext ของ Server ควบคู่ไปกับ ModuleScripts ที่ใช้เฉพาะเซิร์ฟเวอร์
เพื่อแบ่งปันโค้ดระหว่างสคริปต์เซิร์ฟเวอร์และไคลเอนต์ ให้ใช้ ModuleScripts ใน ReplicatedStorage
ใส่สคริปต์ไคลเอนต์จำนวนน้อยที่สุด (เช่น สคริปต์โหลด) ลงใน ReplicatedFirst ด้วย RunContext ของ Client หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่ ลำดับการทำซ้ำ
ใช้ LocalScripts ใน StarterCharacterScripts, StarterPlayerScripts, StarterGui, และ StarterPack
สถานที่ของสคริปต์
| Location | Description |
|---|---|
| Workspace | แทนโลก 3D ของเกม สถานที่นี้ทำงานได้ดีสำหรับสคริปต์ของเซิร์ฟเวอร์ที่เชื่อมต่อโดยตรงกับวัตถุและควบคุมพฤติกรรมของมัน |
| ReplicatedFirst | มีวัตถุที่ทำซ้ำไปยังไคลเอนต์ก่อนสิ่งอื่นใด สถานที่นี้เหมาะสำหรับเซ็ตวัตถุและสคริปต์ของไคลเอนต์ที่ต้องใช้ขั้นต่ำที่สุดเพื่อแสดงหน้าจอโหลด |
| ReplicatedStorage | มีวัตถุที่ถูกทำซ้ำไปยังทั้งไคลเอนต์และเซิร์ฟเวอร์ สถานที่นี้เหมาะสำหรับ ModuleScripts ที่คุณต้องการใช้ทั้งในเซิร์ฟเวอร์และไคลเอนต์ LocalScripts จะไม่ทำงานจากสถานที่นี้ แต่ Scripts ที่มี RunContext เป็น Client จะทำงาน |
| ServerScriptService | มีสคริปต์ของเซิร์ฟเวอร์ สถานที่นี้เหมาะสำหรับสคริปต์ที่ต้องการเข้าถึงฟังก์ชันการทำงานหรือวัตถุฝั่งเซิร์ฟเวอร์ เช่น เกมลอจิกและคลาวด์สโตเรจ |
| ServerStorage | มีวัตถุฝั่งเซิร์ฟเวอร์ สถานที่นี้เหมาะสำหรับวัตถุขนาดใหญ่ที่ไม่จำเป็นต้องถูกทำซ้ำไปยังไคลเอนต์ในทันทีเมื่อพวกเขาเข้าร่วมเกม สคริปต์จะไม่ทำงานจากสถานที่นี้ แต่คุณสามารถเก็บ ModuleScripts ฝั่งเซิร์ฟเวอร์ที่นี่ได้ |
| StarterPlayer ⟩ StarterCharacterScripts | มี LocalScripts ที่ทำงานเมื่ออักขระเกิดขึ้น |
| StarterPlayer ⟩ StarterPlayerScripts | มี LocalScripts ที่ใช้งานทั่วไปซึ่งทำงานเมื่อผู้เล่นเข้าร่วมเกม |
| StarterGui | มีองค์ประกอบ GUI ที่ไคลเอนต์แสดงเมื่อโหลดเกม LocalScripts สามารถทำงานจากสถานที่นี้ สถานที่นี้เหมาะสำหรับสคริปต์ที่ปรับเปลี่ยนอินเทอร์เฟซผู้ใช้ของเกม เช่น การเพิ่มปุ่ม เมนู และป๊อปอัป |
| StarterPack | โดยทั่วไปจะมีเพียง Tools แต่ก็สามารถรวมถึง LocalScripts สำหรับตั้งค่ากระเป๋าผู้เล่นได้ |
ภาพนี้แสดงให้เห็นว่าสถานที่ในหน้าต่าง Explorer ใดที่สามารถเก็บสคริปต์ไคลเอนต์ไว้ได้ จำไว้ว่าตำแหน่ง ReplicatedFirst และ ReplicatedStorage สามารถมี Scripts ที่มี RunContext เป็น Client ขณะที่คอนเทนเนอร์ Starter[] ควรใช้ LocalScripts

โครงสร้างโครงการตัวอย่าง
โครงการอ้างอิง Plant แสดงให้เห็นว่าคุณอาจจัดระเบียบโค้ดของคุณในเกมขนาดใหญ่และซับซ้อนได้อย่างไร
ที่ควรสังเกตเป็นพิเศษคือวิธีที่มันเก็บโค้ดส่วนใหญ่เป็น ModuleScripts ที่สามารถใช้งานซ้ำได้ใน ReplicatedStorage และ ServerStorage