مقدمة إلى سكريبتات الوحدات

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

مع تعقيد المشاريع، يصبح من المهم التفكير في كيفية تنظيم السكريبتات. يمكن أن تضمن ممارسات التنظيم الجيدة عدم تكرار الكود بين السكريبتات، أو أن يصبح من الصعب إدارته.

طريقة أفضل لتنظيم وإعادة استخدام الكود هي باستخدام سكريبتات الوحدات، وهي نوع فريد من السكريبتات التي تخزن مجموعة من الدوال والمتغيرات المصممة لتلبية غرض مشترك، مثل إدارة أموال اللاعبين أو الأعداء. يمكن استخدام الكود داخل سكريبتات الوحدات بواسطة سكريبتات أخرى. بهذه الطريقة، يمكنك استدعاء نفس الدالة التي تعطي العملات من عدة سكريبتات مختلفة كلما أنهى اللاعب مهمة أو وجد عنصرًا.

من خلال تخزين الكود المستخدم بشكل شائع في سكريبتات الوحدات، يصبح من الأسهل صيانة وتنظيم الكود حيث تحتاج التغييرات إلى أن تتم في سكريبت وحدة واحدة فقط، بدلاً من تحديث عدة سكريبتات.

أساسيات سكريبتات الوحدات

سكريبتات الوحدات هي في الواقع كائنات منفصلة مقارنة بكائنات السكريبت. في Roblox، يمكن تمييز سكريبتات الوحدات برمز بنفسجي.

إنشاء سكريبت وحدة

عادةً ما يتم وضع سكريبتات الوحدات في ServerScriptService عند استخدامها بواسطة سكريبتات جانب الخادم وReplicatedStorage عند استخدامها بواسطة سكريبتات محلية على جانب العميل (مثل تفاعلات واجهة المستخدم).

  1. أنشئ ModuleScript في ServerScriptService.

هيكل سكريبتات الوحدات

عند إنشائها، يبدأ كل سكريبت وحدة بالكود أدناه:

local Module = {}
return Module

السطر local Module = {} ينشئ جدولًا، أو حاوية للكود، حيث يمكن تخزين الدوال والمتغيرات المشتركة للوحدة. يجب إعادة تسمية هذا الجدول ليتناسب مع غرض الوحدة، مثل RewardManager أو ParticleController. على عكس المتغيرات الأخرى التي تستخدم حالة الجمل (camel case) (myVariable)، يُوصى باستخدام حالة باسكال (pascal case) وبدءها بحرف كبير (MyModule).

local RewardManager = {}
return RewardManager

لكي تتمكن السكريبتات الأخرى من استخدام الدوال أو المتغيرات غير المحلية لوحدة، تنتهي كل وحدة بـ return MyModule. كلما حاول سكريبت آخر الحصول على كود من الوحدة، يسمح return لذلك السكريبت بالوصول إلى الكود المخزن داخل جدول الوحدة.

إضافة إلى سكريبتات الوحدات

لإضافة دالة أو متغير إلى الوحدة يمكن استخدامه في سكريبت آخر، اكتب اسم جدول الوحدة، متبوعًا بنقطة، واسم الدالة أو المتغير، مثل TestModule.myVariable. استخدام عامل النقطة هو طريقة أخرى لإضافة الكود إلى جدول، مما يسمح للسكريبتات الأخرى بالوصول إلى ذلك الكود كلما تم إرجاع جدول الوحدة.

local TestModule = {}
-- يضيف متغيرًا إلى جدول 'TestModule'
TestModule.myVariable = 100
-- يضيف دالة إلى جدول 'TestModule'
function TestModule.doTask(player)
-- كود مؤقت
end
return TestModule

النطاق في سكريبتات الوحدات

لكي يتم استخدام دالة أو متغير الوحدة في سكريبت خارجي، لا تكتب local.

كتابة local أمام المتغيرات والدوال تعني أنها فقط قابلة للاستخدام بواسطة ذلك السكريبت. بينما تعتبر هذه ممارسة جيدة لمعظم السكريبتات لتقليل الأخطاء وحل المشكلات، لا يمكنك جعل دوال ومتغيرات سكريبت الوحدة محلية.

يجب أن يتضمن أي كود يُستخدم فقط بواسطة سكريبت الوحدة local. على سبيل المثال، يتضمن الكود أدناه المتغير المحلي difficultyModifier، الذي يمكن استخدامه فقط في سكريبت الوحدة، والدالة getCoinReward()، التي يمكن استخدامها في السكريبتات خارج الوحدة.

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() حجة واحدة، وهي موقع سكريبت الوحدة في مستكشف Roblox.

لاستخدام وحدة، في سكريبت منفصل، قم بتعيين متغير يساوي require(moduleScript).

local MyModule = require(ServerStorage.ModuleScript)

الآن، يحتوي المتغير MyModule على جدول الوحدة الذي تم إنشاؤه في ذلك السكريبت. لاستخدام الدوال والمتغيرات من ذلك الجدول، اكتب اسم المتغير، متبوعًا بنقطة، واسم ما تريد استخدامه في سكريبت الوحدة، مثل MyModule.myFunction(). عندما يتم تشغيل السكريبت ويصل إلى ذلك السطر، سيصل إلى تلك الدالة أو المتغير المحدد المخزن في جدول الوحدة.

local MyModule = require(ServerStorage.ModuleScript)
MyModule.myFunction()

مثال على RewardManager

ModuleScript - RewardManager
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
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")
-- تحميل سكريبت الوحدة
local RewardManager = require(ServerStorage.RewardManager)
-- يستدعي دالة من سكريبت الوحدة
local coins = RewardManager.getCoinReward("easy")
print("Should award " .. coins .. " coins")

استكشاف الأخطاء العامة

بعض النصائح هنا تتناول المشكلات الشائعة عند العمل مع سكريبتات الوحدات. تذكر أن سكريبتات الوحدات يمكن أن تكون موضوعًا معقدًا مع المزيد من التفاصيل. لمزيد من التفاصيل، راجع هذا الدليل الأكثر تقنية حول سكريبتات الوحدات.

المشكلة: الحصول على رسالة خطأ تتضمن: "Infinite yield possible" أو "not a valid member".

  • تحقق من تهجئة سكريبت الوحدة حيث يتم تحميله. يجب أن تتضمن require() المسار والتهجئة الدقيقة لسكريبت الوحدة، والذي قد يكون له اسم مختلف عن جدول الوحدة.

المشكلة: الحصول على رسالة خطأ تتضمن: "attempt to index global".

  • في أي سكريبتات تستخدم سكريبت وحدة، تأكد من أنه تم تحميله باستخدام الدالة require(). إذا لم يكن كذلك، فلا يمكن لذلك السكريبت استخدام الدوال والمتغيرات من سكريبت الوحدة.

ملخص

سكريبتات الوحدات في Roblox هي طريقة يستخدمها المبرمجون لتنظيم وإعادة استخدام الكود. غالبًا ما يتم تخزين سكريبت الوحدة في ServerStorage (أو ReplicatedStorage للتفاعلات المعتمدة على العميل). من هناك، يمكن للسكريبتات الأخرى استدعاء الدوال والمتغيرات المخزنة في سكريبت الوحدة.

على سبيل المثال، قد تمنح لعبة ما نقاطًا للاعبين مقابل جمع العناصر. يمكن أن يتعامل سكريبت الوحدة مع الكود لمنح النقاط. بعد ذلك، يمكن لسكريبتات أنواع مختلفة من العناصر فقط استدعاء دالة سكريبت الوحدة. هذا يقلل من الحاجة لإعادة استخدام الكود بين السكريبتات، مما يجعل الكود أسهل للفهم والصيانة.

©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.