Birçok geliştirici için, Roblox betiklerine uyum sağlamanın temel zorluğu dosya konumunun ve Script.RunContext özelliğinin önemidir. Betik türüne, Explorer içindeki konumuna ve çalışma bağlamına bağlı olarak, betikler çok farklı davranışlar sergileyebilir. Bazı yöntem çağrıları başarısız olabilir, oyundaki nesnelere erişim sağlanamayabilir veya betikler hiç çalışmayabilir.
Bu karmaşanın nedeni, Roblox oyunlarının varsayılan olarak çok oyunculu olmasıdır. Betiklerin yalnızca sunucuda çalışması, yalnızca istemcide çalışması veya her iki taraf arasında paylaşılması gerekebilir. Roblox platformunun zamanla evrimi durumu daha da karmaşık hale getirmiştir.
Betik türleri
Roblox'ta üç tür betik bulunmaktadır:
- Script - Sunucuda veya istemcide çalışabilen kod, konumuna ve Script.RunContext özelliğine bağlıdır.
- LocalScript - Sadece istemcide çalışan kod. Bir çalışma bağlamı yoktur.
- ModuleScript - Diğer betiklerde yeniden kullanılabilen kod. Bir çalışma bağlamı yoktur.
Bir Script oluşturduğunuzda, varsayılan çalışma bağlamı Legacydir, bu da a) sunucu tarafı betiği olduğu ve b) yalnızca Workspace veya ServerScriptService gibi bir sunucu içeriğinde bulunduğunda çalıştığı anlamına gelir.
- Eğer betiğin çalışma bağlamını Server olarak değiştirirseniz, artık ReplicatedStorage içinde de çalışabilir, ancak bu tavsiye edilmez. Bu konumun içeriği istemcilere çoğaltıldığından, sunucu tarafı betikleri için kötü bir konumdur.
- Eğer betiğin çalışma bağlamını Client olarak değiştirirseniz, ReplicatedStorage içinde çalışabilir. Ayrıca StarterCharacterScripts ve StarterPlayerScripts içerisinde de çalışabilir. Başlangıç konteynerleri istemcilere kopyalandığından, orijinal betik ve kopyası çalışır, bu istenmeyen bir durumdur.
Bir betik çalışma bağlamını değiştirmek için, Explorer içinde onu seçin ve Properties penceresindeki değeri değiştirin.

Tavsiyeler
İstemci betiklerini ReplicatedStorage içine, Client çalışma bağlamı ile, yalnızca istemci için olan ModuleScripts ile birlikte yerleştirin.
Studio'da hata ayıklarken, Output penceresindeki satırlara tıklayarak ReplicatedStorage.YourScript (betiğin kararlı konumu) üzerinden gitmek yerine Players.YourName.PlayerScripts.YourScript (betiğin çalışma zamanında kopyalandığı geçici konum) üzerinden gidebilirsiniz.
Sunucu betiklerini ServerScriptService içinde, Server çalışma bağlamı ile, yalnızca sunucu için olan ModuleScripts ile birlikte yerleştirin.
Sunucu ve istemci betikleri arasındaki kodu paylaşmak için, ReplicatedStorage içindeki ModuleScripts kullanın.
Betikleri modellerin ve paketlerin içinde yerleştirirseniz, her betik için bir RunContext belirleyin ve nasıl çalıştığını belirginleştirin. Bu özelliği açıkça ayarlamak, modellerin ve paketlerin çeşitli konumlardan düzgün çalışmasını sağlama olasılığını artırır.
İstemci betikleri (örneğin, bir yükleme betiği) için sınırlı sayıda betiği ReplicatedFirst içine, Client çalışma bağlamı ile yerleştirin. Daha fazla bilgi için Replication order kısmına bakın.
LocalScripts'i StarterCharacterScripts, StarterPlayerScripts, StarterGui ve StarterPack içinde kullanın.
Betik konumları
| Location | Description |
|---|---|
| Workspace | Oyunun 3D dünyasını temsil eder. Bu konum, nesnelere doğrudan bağlanan ve davranışlarını kontrol eden sunucu scriptleri için iyi çalışır. |
| ReplicatedFirst | İlk önce istemciye kopyalanan nesneleri içerir. Bu konum, bir yükleme ekranı görüntülemek için gerekli olan en az nesne ve istemci scriptlerinin kopyalanması için idealdir. |
| ReplicatedStorage | Hem istemciye hem de sunucuya kopyalanan nesneleri içerir. Bu konum, hem sunucuda hem de istemcide kullanmak istediğiniz ModuleScripts için idealdir. LocalScripts bu konumdan çalışmaz, ancak RunContext'ı Client olan Scripts bu konumdan çalışır. |
| ServerScriptService | Sunucu scriptlerini içerir. Bu konum, oyun mantığı ve bulut depolama gibi sunucu tarafı işlevsellik veya nesnelere erişmesi gereken scriptler için idealdir. |
| ServerStorage | Sunucu tarafı nesnelerini içerir. Bu konum, oyununa katıldıklarında istemcilere hemen kopyalanması gerekmeyen büyük nesneler için idealdir. Scriptler bu konumdan çalışmaz, ancak burada sunucu tarafı ModuleScripts saklayabilirsiniz. |
| StarterPlayer ⟩ StarterCharacterScripts | Karakterin doğduğunda çalışan LocalScripts içerir. |
| StarterPlayer ⟩ StarterPlayerScripts | Oyuncu oyuna katıldığında çalışan genel amaçlı LocalScripts içerir. |
| StarterGui | İstemcinin oyunu yüklediğinde görüntülediği GUI öğelerini içerir. LocalScripts bu konumdan çalışabilir. Bu konum, oyunun kullanıcı arayüzünü değiştirerek düğmeler, menüler ve açılır pencereler eklemek gibi scriptler için idealdir. |
| StarterPack | Genel olarak yalnızca Tools içerir, ancak oyuncu sırt çantalarını kurmak için LocalScripts de içerebilir. |
Bu resim, hangi Explorer pencere konumlarının istemci betiklerini içerebileceğini göstermektedir. Unutmayın ki, ReplicatedFirst ve ReplicatedStorage, Scripts içerebilir ve RunContext değeri Client olmalıdır; bu arada Starter[] konteynerleri LocalScripts kullanmalıdır.

Örnek proje yapısı
Plant referans projesi, karmaşık bir oyunda kodunuzu nasıl düzenleyeceğinizi gösterir.
Özellikle dikkate değer olan, kodunun büyük çoğunluğunu ReplicatedStorage ve ServerStorage içindeki yeniden kullanılabilir ModuleScripts olarak saklamasıdır.