Jenis dan lokasi skrip

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Bagi banyak pengembang, tantangan mendasar dalam beradaptasi dengan pemrograman Roblox adalah pentingnya lokasi file dan properti Script.RunContext. Tergantung pada jenis skrip, lokasi di Explorer, dan konteks eksekusi, skrip dapat berperilaku sangat berbeda. Panggilan metode tertentu mungkin gagal, objek dalam permainan Anda mungkin tidak dapat diakses, atau skrip mungkin tidak dijalankan sama sekali.

Alasan untuk kompleksitas ini adalah bahwa permainan Roblox adalah multiplayer secara default. Skrip perlu memiliki kemampuan untuk hanya dijalankan di server, hanya dijalankan di klien, atau dibagikan di kedua sisi. Evolusi platform Roblox seiring waktu semakin memperumit situasi ini.

Jenis skrip

Roblox memiliki tiga jenis skrip:

  • Script - Kode yang dijalankan di server atau klien, tergantung pada lokasinya dan properti Script.RunContext.
  • LocalScript - Kode yang hanya dijalankan di klien. Tidak memiliki konteks eksekusi.
  • ModuleScript - Kode yang dapat Anda gunakan kembali di skrip lain. Tidak memiliki konteks eksekusi.

Ketika Anda membuat Script, konteks eksekusi defaultnya adalah Legacy, yang berarti bahwa a) ini adalah skrip sisi server dan b) hanya dijalankan jika berada di dalam wadah server, seperti ServerScriptService atau Workspace.

  • Jika Anda mengubah konteks eksekusi skrip menjadi Server, sekarang juga dapat dijalankan di ReplicatedStorage, tetapi kami tidak merekomendasikannya. Konten lokasi tersebut direplikasi ke klien, sehingga merupakan lokasi yang buruk untuk skrip sisi server.
  • Jika Anda mengubah konteks eksekusi skrip menjadi Client, ia dapat dijalankan di ReplicatedStorage. Ia juga dapat dijalankan di StarterCharacterScripts dan StarterPlayerScripts. Wadah starter disalin ke klien, jadi skrip asli dan salinannya dijalankan, yang tidak diinginkan.

Untuk mengubah konteks eksekusi skrip, pilih skrip tersebut di Explorer dan ubah nilainya di jendela Properties.

Properti RunContext ditunjukkan untuk sebuah Skrip.

Rekomendasi

  • Tempatkan satu Script dengan RunContext dari Client ke dalam ReplicatedStorage.

  • Tempatkan satu Script dengan RunContext dari Server ke dalam ServerScriptService.

  • Gunakan ModuleScripts untuk sebanyak mungkin kode klien dan server. Minta modul-modul ini dari skrip klien Anda dan skrip server Anda.

    Pendekatan ini memberikan kode Anda satu titik masuk di sisi klien dan server, yang menyederhanakan organisasi dan memudahkan untuk mengisolasi atau menonaktifkan modul yang bermasalah. Tambahkan fungsi start() ke setiap ModuleScript sehingga semua modul dapat dimuat sebelum Anda mulai mengeksekusi kode mereka:

    Contoh skrip server
    --!strict
    local ServerScriptService = game:GetService("ServerScriptService")
    local SampleModule = require(ServerScriptService.SampleModule)
    local AnotherSampleModule = require(ServerScriptService.AnotherSampleModule)
    SampleModule.start()
    AnotherSampleModule.start()
    Contoh modul
    --!strict
    local CollectionService = game:GetService("CollectionService")
    local NPC_TAG = "npc"
    local SampleModule = {}
    local function setUpNpc(npc: Instance)
    -- inisialisasi setiap NPC
    end
    local function cleanUpNpc(npc: Instance)
    -- dijalankan saat event terjadi
    end
    function SampleModule.start() -- tambahkan fungsi ke tabel
    -- contoh loop untuk setup berdasarkan tag
    for _, npc in CollectionService:GetTagged(NPC_TAG) do
    setUpNpc(npc)
    end
    -- jalankan fungsi saat event terjadi
    CollectionService:GetInstanceAddedSignal(NPC_TAG):Connect(setUpNpc)
    CollectionService:GetInstanceRemovedSignal(NPC_TAG):Connect(cleanUpNpc)
    end
    return SampleModule
  • Untuk berbagi kode, gunakan ModuleScripts di ReplicatedStorage dan minta mereka di skrip klien dan skrip server Anda.

  • Jika perlu untuk permainan Anda, ulangi pola yang sama di ReplicatedFirst dengan satu skrip klien dan jumlah minimal ModuleScripts untuk menerapkan layar pemuatan. Untuk mempelajari lebih lanjut tentang ReplicatedFirst, lihat Urutan replikasi.

  • Gunakan LocalScripts dengan hemat. Jika Anda harus menggunakannya, tempatkan di StarterCharacterScripts, StarterPlayerScripts, StarterGui, atau StarterPack.

    Skrip dalam wadah ini disalin ke wadah pemain daripada dijalankan dari satu lokasi, yang dapat mempersulit debugging. Menggunakan ReplicatedStorage untuk kode klien memungkinkan Anda mengklik baris di jendela Output dan pergi ke ReplicatedStorage.YourScript (lokasi stabil dari skrip) daripada Players.YourName.PlayerScripts.YourLocalScript (lokasi sementara yang disalin skrip saat runtime).

  • Hindari melampirkan skrip langsung ke instance di Workspace. Sebagai gantinya, tandai instance dan gunakan CollectionService untuk bekerja dengan mereka dari satu ModuleScript.

    Pengecualian utama adalah jika Anda mendistribusikan model atau paket di Toko Pembuat. Dalam hal ini, Anda mungkin perlu menyertakan skrip dalam hierarki instance; tentukan RunContext untuk setiap skrip untuk menghilangkan ambiguitas tentang bagaimana skrip tersebut dijalankan. Menetapkan properti ini secara eksplisit membuat model dan paket lebih mungkin berfungsi dengan baik dari berbagai lokasi.

Contoh struktur proyek

Proyek referensi Plant menunjukkan bagaimana Anda dapat mengatur kode Anda dalam permainan yang besar dan kompleks. Ini menyimpan sebagian besar kode sebagai ModuleScripts yang dapat digunakan kembali.

Lokasi skrip

LocationDescription
WorkspaceMewakili dunia 3D permainan. Dapat menjalankan skrip server yang terhubung langsung ke objek dan mengontrol perilakunya.
ReplicatedFirstBerisi objek yang direplikasi ke klien sebelum yang lainnya. Lokasi ini ideal untuk set objek dan skrip klien yang paling minimum yang diperlukan untuk menampilkan layar pemuatan.
ReplicatedStorageBerisi objek yang direplikasi ke klien dan server. Lokasi ini ideal untuk Scripts dengan RunContext dari Client, ModuleScripts klien, dan ModuleScripts yang ingin Anda gunakan di server dan klien. LocalScripts tidak dijalankan dari lokasi ini.
ServerScriptServiceBerisi skrip server. Lokasi ini ideal untuk skrip yang perlu mengakses fungsionalitas atau objek sisi server, seperti logika permainan dan penyimpanan cloud.
ServerStorageBerisi objek sisi server. Lokasi ini ideal untuk objek besar yang tidak perlu segera direplikasi ke klien saat mereka bergabung dengan permainan. Skrip tidak dijalankan dari lokasi ini, tetapi Anda dapat menyimpan ModuleScripts sisi server di sini.
StarterPlayer ⟩ StarterCharacterScriptsBerisi LocalScripts yang dijalankan saat karakter muncul.
StarterPlayer ⟩ StarterPlayerScriptsBerisi LocalScripts yang dijalankan saat pemain bergabung dengan permainan.
StarterGuiBerisi elemen GUI yang ditampilkan klien saat memuat permainan. LocalScripts dapat dijalankan dari lokasi ini.
StarterPackUmumnya hanya berisi Tools, tetapi juga dapat menyertakan LocalScripts untuk menyiapkan ransel pemain.

Gambar ini menunjukkan lokasi jendela Explorer mana yang dapat berisi skrip klien. Ingat, ReplicatedFirst dan ReplicatedStorage dapat berisi Scripts dengan RunContext dari Client, sedangkan wadah Starter[] harus menggunakan LocalScripts.

Diagram menunjukkan lokasi skrip mana yang dijalankan di klien.
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.