เมื่อโครงการกลายเป็นโครงการที่ซับซ้อน การคิดวิธีการที่สคริปต์จัดระเบียบาลจะเป็นสิ่งสำคัญ การจัดการองค์กรที่ดีสามารถรับประกันได้ว่าโค้ดไม่ซ้ำกันระหว่างสคริปต์หรือกลายเป็นเรื่องยากที่จะจัดการ
วิธีที่ดีกว่าในการจัดการและใช้ซ้ำรหัสคือด้วย สคริปต์โมดูล ซึ่งเป็นประเภทของสคริปที่เก็บชุดของระบบการทำงานที่ออกแบบมาเพื่อตอบสนองเป้าหมายร่
โดยการเก็บรหัสที่ใช้กันอยู่ในสคริปต์โมดูล ทำให้การใช้งานและจัดการรหัสเป็นเรื่องง่าย เนื่องจากการเปลี่ยนแปลงเฉพาะตัวอย่างเดียวต้องการที่จะทำต่อโมดูลสคริปต์หนึ่ง ไม่จำเป็นต้องปรับปรุงหลายสคริปต์
คําแนะนําเกี่ยวกับสคริปต์โมดูล
สคริปต์โมดูลเป็นจริงเป็นวัตถุแยกของตัวเองเมื่อเปรียบเทียบกับวัตถุสคริปต์ ใน Roblox สคริปต์โมดูลสามารถระบุด้วยไอคอน สีม่วง
การสร้างสคริปโมดูล
ModuleScripts มักถูกวางใน ServerScriptService เมื่อใช้โดยสคริปต์ด้านเซิร์ฟเวอร์และ ReplicatedStorage เมื่อใช้โดยสคริปต์ด้านลูกค้า (เช่นการใช้งาน GUI)
- สร้าง ModuleScript ใน ServerStorage
โครงสร้างของสคริปต์โมดูล
เมื่อสร้างขึ้นมาใหม่ทุกครั้ง เค้าโครงของแต่ละโมดูลจะเริ่มต้นด้วยโค้ดด้านล่าง:
local Module = {}return Module
สาย local Module = {} สร้างตารางหรือคอนเทนเนอร์ของโค้ดที่โมดูลสามารถเก็บได้ ตารางนี้ควรเปลี่ยนชื่อเป็นชื่อ
local RewardManager = {}return RewardManager
ดังนั้นสคริปต์อื่น ๆ จึงสามารถใช้งานได้โดยไม่ต้องใช้ตัวแปรหรือการทำงานของโมดูล ทุกโมดูลสิ้นสุดด้วยการกลับมาที่ MyModule เมื่อสคริปต์อื่นพยายามรับรหัสจากโมดูล
การเพิ่มในโค้ดโมดูล
เพื่อเพิ่มฟังก์ชันหรือแปรที่สามารถใช้ในสคริปต์อื่นได้โดยการเขียนชื่อโต๊ะของโมดูลด้วยดอทและชื่อของฟังก์ชันหรือแปรนั้น เช่นใน TestModule.myVariable โดยใช้ตั
local TestModule = {}
-- เพิ่มตัวแปรใหม่ในโต๊ะ 'TestModule'
TestModule.myVariable = 100
-- เพิ่มหน้าต่างใหม่ในตาราง 'TestModule'
function TestModule.doTask(player)
-- รหัสผู้ช่วย
end
return TestModule
สโคปในโค้ดโมดูล
สำหรับหน้าต่างการใช้งานหรือแปรที่จะใช้ในสคริปต์ภายนอก, อย่า เขียนว่า local
พิมพ์ local ต่อหน้าตัวแปรและฟังก์ชันหมายถึงว่าพวกเขาเป็น เฉพาะ สำหรับตัวเรื่องเท่านั้น ในขณะที่นี่เป็นการฝึกซ้อมที่ดีสำหรับส่วนใหญ่ของสคริปต์เพื่อลดข้อผิดพลาดแ
ใดๆ โค้ดที่ใช้ เท่านั้น โดยสคริปต์โมดูลนั้นยังควรรวม local ด้วย อินสแตนซ์โค้ดด้านล่างรวมปริมาณตัวแปร difficultyModifier ซึ่งสาม
local RewardManager = {}
-- ใช้ได้เฉพาะสคริปต์โมดูลเท่านั้น
local rewardCoins = 50
-- ใช้ได้เฉพาะสคริปต์โมดูลเท่านั้น
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- ใช้ได้ในสคริปต์อื่น
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
การใช้โมดูลในสคริปต์อื่น
โดยตัวเอง, สคริปต์โมดูลไม่สามารถรันโค้ดได้ — มันต้องโหลดในสคริปต์อื่นโดยใช้คำสั่งนี้ require() ตัวฟังก์ชัน require() ยอมรับอาร์กวิสต์หนึ่ง,
เพื่อใช้โมดูลในสคริปที่แยกออกจากกันตั้งแป้นที่เท่ากับ require(moduleScript)
local MyModule = require(ServerStorage.ModuleScript)
ตอนนี้ตัวแปร MyModule ประกอบด้วยโมดูลที่ถูกสร้างขึ้นในสคริปโมดูลนั้น เพื่อใช้ฟังก์ชันและตัวแปรจากโมดูลนั้น ให้พิมพ์ชื่อตัวแปรที่ชื่อ
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
ตัวอย่าง RewardManager
ModuleScript - ผู้จัดการรางวัล
local RewardManager = {}
-- ใช้ได้เฉพาะสคริปต์โมดูลเท่านั้น
local rewardCoins = 50
-- ใช้ได้เฉพาะสคริปต์โมดูลเท่านั้น
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- ใช้ได้ในสคริปต์อื่น
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
สคริป - สคริปต์ - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- โหลดสคริปโมดูลlocal RewardManager = require(ServerStorage.RewardManager)--เรียกฟังก์ชันจากสคริปต์โมดูลlocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
แก้ปัญหาทั่วไป
เคล็ดลับบางอย่างที่นี่จะรวมถึงปัญหาทั่วไปเมื่อทำงานกับสคริปต์โมดูล โปรดทราบว่าสคริปต์โมดูลสามารถเป็นหัวข้อที่ซับซ้อนมีมากขึ้นได้ สำหรับรายละเอียดเพิ่มเติมโปรดดูไกด์ทางเทคนิคนี้เกี่ ปัญหา: รับข้อความผิดพลาดรวมถึง: "Infinite yield possible"Infinite ให้น้ำผลิตได้ หรือ "not a valid member"ไม่ใช่สมาชิกที่ถูกต้อง .
ตรวจสอบความถูกต้องของสคริปต์โมดูลที่โหลด require() จะต้องรวมถึงเส้นทางและคำอธิบายที่ถูกต้องของสคริปต์โมดูลซึ่งอาจมีชื่อแตกต่างจากโต๊ะโมดูล ปัญหา: รับข้อความผิดพลาดรวมถึง: "attempt to index global" .
ในสคริปต์ใด ๆ ที่ใช้สคริปต์โมดูลให้แน่ใจว่ามันโหลดโดยการใช้งาน require() หากไม่ได้ สคริปต์นั้นไม่สามารถใช้งานและตัวแปรจากโมดูลสคริปต์ได้
สรุป
สคริปต์โมดูล ใน Roblox รหัสสคริปต์โมดูลมักจะถูกเก็บไว้ใน ServerStorage (หรือ ReplicatedStorage สำหรับการใช้งานของลูกค้า) จากที่นั่น สคริปต์อื
อินสแตนซ์ผู้เล่นอาจได้รับคะแนนสำหรับการเก็บวัตถุ สคริปต์โมดูลสามารถจัดการโค้ดเพื่อให้คะแนนได้ จากนั้น สคริปต์สำหรับแต่ละประเภทของวัตถุสามารถเรียกสคริปต์โมดูลได้