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

คำแนะนำ
การใช้ Server และ Client ค่าสําหรับ RunContext ลบความไม่ชัดเจนจากวิธีที่สคริปต์ทํางานและสามารถช่วยให้โครงการของคุณเป็นระเบียบกรณีการใช้งานที่ดีที่สุดสำหรับค่าไม่เป็นค่าเริ่มต้น RunContext คือ:
- สคริปต์ไคลเอนต์ที่คุณต้องการรันจาก ReplicatedStorage หรือ ReplicatedFirst
เพื่อแบ่งปันโค้ดระหว่างสคริปต์เซิร์ฟเวอร์และไคลเอนต์ใช้ ModuleScripts ใน ReplicatedStorage
ใช้ LocalScripts ใน StarterCharacterScripts , StarterPlayerScripts , StarterGui และ StarterPack .
ตำแหน่งของสคริปต์
สถานที่ | คําอธิบาย :--- | :--- พื้นที่ทํางาน | แทนที่โลกเกมตำแหน่งนี้ทำงานได้ดีสำหรับสคริปต์เซิร์ฟเวอร์ที่แนบกับวัตถุและควบคุมพฤติกรรมของพวกเขาโดยตรงReplicatedFirst | มีวัตถุที่สําเนาไปยังไคลเอนต์ก่อนสิ่งอื่นใดตำแหน่งนี้เหมาะสำหรับชุดของวัตถุและสคริปต์คลาสสิกที่จำเป็นสำหรับการแสดงหน้าจอโหลดสตอเรจที่ซ้ำกัน | มีวัตถุที่ถูกสําเนาไปยังทั้งไคลเอนต์และเซิร์ฟเวอร์ตำแหน่งนี้เหมาะสำหรับ Class.ModuleScript\|ModuleScripts ที่คุณต้องการใช้ทั้งในเซิร์ฟเวอร์และไคลเอนต์Class.LocalScript\|LocalScripts ไม่ได้หนีออกจากตำแหน่งนี้ แต่ Class.Script\|Scripts ด้วยบริบทการทำงานของ Client ทำServerScriptService | มีสคริปต์เซิร์ฟเวอร์ คอนเทนต์ตำแหน่งนี้เหมาะสำหรับสคริปต์ที่ต้องการเข้าถึงฟังก์ชันหรือวัตถุด้านเซิร์ฟเวอร์ เช่น โลจิสติกเกมและการจัดเก็บของเมฆStorage เซิร์ฟเวอร์ | มีวัตถุด้านเซิร์ฟเวอร์ตำแหน่งนี้เหมาะสำหรับวัตถุขนาดใหญ่ที่ไม่จำเป็นต้องสร้างซ้ำทันทีให้กับลูกค้าเมื่อพวกเขาเข้าร่วมประสบการณ์สคริปต์ไม่ได้รันจากตำแหน่งนี้ แต่คุณสามารถเก็บไว้ที่ด้านเซิร์ฟเวอร์ Class.ModuleScript\|ModuleScripts ที่นี่StarterPlayer.StarterCharacterScripts | มี Class.LocalScript\|LocalScripts ที่เรียกใช้เมื่อตัวละครเกิดStarterPlayer.StarterPlayerScripts | มีสคริปต์ทั่วไป Class.LocalScript\|LocalScripts ที่เรียกใช้เมื่อผู้เล่นเข้าร่วมประสบการณ์StarterGui | มีองค์ประกอบ GUI ที่ลูกค้าแสดงเมื่อโหลดเกมClass.LocalScript\|LocalScripts สามารถวิ่งจากตำแหน่งนี้ได้ตำแหน่งนี้เหมาะสำหรับสคริปต์ที่แก้ไขอินเทอร์เฟซผู้ใช้ของเกม เช่น เพิ่มปุ่ม เมนู และป๊อปอัพแพ็คเริ่มต้น | โดยทั่วไปจะมีเฉพาะ Class.Tool\|Tools เท่านั้น แต่ยังสามารถรวมถึง Class.LocalScript\|LocalScripts สำหรับการตั้งค่ากระเป๋าผู้เล่น
ภาพนี้แสดงตำแหน่งหน้าต่าง Explorer ที่สามารถบรรจุสคริปต์ไคลเอนต์ได้จำไว้ว่า ReplicatedFirst และ ReplicatedStorage สามารถมี Scripts ด้วย RunContext ของ Client ในขณะที่คอนเทนเนอร์ Starter[] ควรใช้ LocalScripts

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