Modül betikleriyle tanışma

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Projeler karmaşık hale geldikçe, betiklerin nasıl düzenlendiğini düşünmek önem kazanır. İyi organizasyon uygulamaları, kodun betikler arasında kopyalanmadığından veya yönetilmesinin zor hale gelmediğinden emin olabilir.

Kodun düzenlenmesi ve yeniden kullanılması için daha iyi bir yol, modül betikleri kullanmaktır; bu, belirli bir amaca hizmet eden bir dizi işlev ve değişkeni depolayan benzersiz bir betik türüdür, örneğin oyuncu parası veya düşmanları yönetmek gibi. Modül betiklerindeki kod, diğer betikler tarafından kullanılabilir. Bu şekilde, bir oyuncu bir görevi tamamladığında veya bir nesne bulduğunda, farklı betiklerden aynı madeni para veren işlevi çağırabilirsiniz.

Sık kullanılan kodları modül betiklerinde depolayarak, kodun bakımını ve düzenlenmesini kolaylaştırır çünkü değişiklikler yalnızca bir modül betiğinde yapılması yeterlidir, birden fazla betiği güncellemeye gerek kalmaz.

Modül betiklerinin temelleri

Modül betikleri, betik nesnelerine kıyasla kendi ayrı nesneleridir. Roblox'ta, modül betikleri mor bir simge ile gösterilebilir.

Modül betiği oluşturma

ModülBetikleri genellikle sunucu tarafı betikleri tarafından kullanıldığında ServerScriptService içinde ve istemci tarafı yerel betikler (örneğin GUI etkileşimleri) tarafından kullanıldığında ReplicatedStorage içinde yer alır.

  1. ServerScriptService içinde bir ModuleScript oluşturun.

Modül betiklerinin yapısı

Oluşturulduğunda, her modül betiği aşağıdaki kodla başlar:

local Module = {}
return Module

local Module = {} satırı, modülün paylaşılan işlev ve değişkenlerinin depolanabileceği bir tablo veya kod konteyneri oluşturur. Bu tablo, RewardManager veya ParticleController gibi modülün amacına göre yeniden adlandırılmalıdır. Diğer değişkenlerin camel case (myVariable) kullanmasına karşın, modül tablolarının pascal case kullanması ve büyük harfle başlaması önerilir (MyModule).

local RewardManager = {}
return RewardManager

Diğer betiklerin bir modülün yerel olmayan işlevlerini veya değişkenlerini kullanabilmesi için, her modül return MyModule ile sona erer. Başka bir betik modülden kod almaya çalıştığında, return o betiğin modül tablosundaki kodlara erişmesini sağlar.

Modül betiklerine ekleme

Başka bir betikte kullanılabilecek bir işlev veya değişken eklemek için, modül tablosunun adını yazın, ardından bir nokta koyun ve işlev veya değişkenin adını yazın, örneğin TestModule.myVariable. Nokta operatörünü kullanmak, bir tabloya kod eklemenin başka bir yoludur ve diğer betiklerin modül tablosu döndürüldüğünde o koda erişmesini sağlar.

local TestModule = {}
-- 'TestModule' tablosuna bir değişken ekler
TestModule.myVariable = 100
-- 'TestModule' tablosuna bir işlev ekler
function TestModule.doTask(player)
-- Yer tutucu kod
end
return TestModule

Modül betiklerinde kapsam

Bir modül işlevinin veya değişkeninin dışarıdaki bir betikte kullanılabilmesi için, local yazmayın.

Değişkenlerin ve işlevlerin önüne local yazmak, onların yalnızca o betik tarafından kullanılabilir olduğu anlamına gelir. Bu, hataları azaltmak ve sorun gidermek için çoğu betik için iyi bir uygulama olsa da, modül betiği işlevlerini ve değişkenlerini yerel yapamazsınız.

Yalnızca o modül betiği tarafından kullanılan her kod hala local içermelidir. Örneğin, aşağıdaki kod, yalnızca o modül betiğinde kullanılabilen yerel değişken difficultyModifier ve modül dışındaki betiklerde kullanılabilen getCoinReward() işlevini içerir.

local RewardManager = {}
-- Yalnızca modül betiğinde kullanılabilir
local rewardCoins = 50
-- Yalnızca modül betiğinde kullanılabilir
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Diğer betiklerde kullanılabilir
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager

Modülleri diğer betiklerde kullanma

Kendiliğinden, bir modül betiği kod çalıştıramaz — başka bir betikte require() anahtar kelimesi kullanılarak yüklenmesi gerekir. require() fonksiyonu, modül betiğinin Explorer'daki konumunu içeren bir argüman alır.

Bir modülü kullanmak için, ayrı bir betikte bir değişkeni require(moduleScript) ile eşitleyin.

local MyModule = require(ServerStorage.ModuleScript)

Artık MyModule değişkeni, o modül betiğinde oluşturulan modül tablosunu içerir. O tablodan işlevleri ve değişkenleri kullanmak için, değişken adını yazın, ardından bir nokta koyun ve o modül betiğindeki tam adı yazın, örneğin MyModule.myFunction(). Betik çalıştığında ve o satıra ulaştığında, modül tablosunda depolanan o belirli işlev veya değişkene erişecektir.

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

RewardManager örneği

ModuleScript - RewardManager
local RewardManager = {}
-- Yalnızca modül betiğinde kullanılabilir
local rewardCoins = 50
-- Yalnızca modül betiğinde kullanılabilir
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Diğer betiklerde kullanılabilir
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")
-- Modül betiğini yükle
local RewardManager = require(ServerStorage.RewardManager)
-- Modül betiğinden işlev çağır
local coins = RewardManager.getCoinReward("easy")
print("Ödül olarak " .. coins .. " madeni para verilmelidir")

Genel sorun giderme

Buradaki bazı ipuçları, modül betikleri ile çalışırken karşılaşılan yaygın sorunları ele alır. Modül betiklerinin daha karmaşık bir konu olabileceğini unutmayın. Daha fazla ayrıntı için, Modül Betikleri hakkında daha teknik bir kılavuza bakın.

Sorun: "Infinite yield possible" veya "not a valid member" içeren bir hata mesajı alıyorsunuz.

  • Yüklenen modül betiğinin yazımını kontrol edin. require() modül betiğinin tam yolunu ve yazımını içermelidir; bu, modül tablosundan farklı bir isimle adlandırılmış olabilir.

Sorun: "attempt to index global" içeren bir hata mesajı alıyorsunuz.

  • Modül betiğini kullanan herhangi bir betikte, require() fonksiyonu kullanılarak yüklendiğinden emin olun. Aksi takdirde, o betik modül betiğinden işlevleri ve değişkenleri kullanamaz.

Özet

Roblox'taki modül betikleri, kodları düzenlemek ve yeniden kullanmak için kodlayıcıların kullandığı bir yöntemdir. Bir modül betiği genellikle ServerStorage'da (veya istemci tabanlı etkileşimler için ReplicatedStorage'da) depolanır. Oradan, diğer betikler o modül betiğinde depolanan işlevleri ve değişkenleri çağırabilir.

Örneğin, bir oyun, nesneleri toplamak için oyunculara puan verebilir. Bir modül betiği, puan vermek için kodu işleyebilir. Ardından, farklı nesne türleri için betikler yalnızca modül betiği işlevini çağırabilir. Bu, betikler arasında kodu yeniden kullanma ihtiyacını azaltır ve kodun daha anlaşılır ve bakımı daha kolay hale gelmesini sağlar.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.