Buat mekanik koleksi koin

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


Sekarang Anda memiliki dunia 3D, saatnya menambahkan skrip pertama Anda. Di bagian ini, Anda akan membuat mekanik koleksi koin yang memungkinkan pemain mengumpulkan koin dan secara sementara menonaktifkan koin setelah dikumpulkan.

Buat koin

Sebelum Anda dapat membuat skrip, Anda perlu memiliki objek placeholder di dunia yang digunakan sebagai koin Anda. Seperti platform tumpukan laut yang Anda buat di bagian sebelumnya, koin dapat berupa objek Part sederhana.

Buat koin

Di Workspace > World, buat folder baru bernama Coins.
Di dalam folder Coins, buat Part silinder bernama Coin dengan BrickColor diatur ke Gold, Material diatur ke Metal, Size 0.6, 8, 4, dan Orientasi 90, 0, 0.
Nonaktifkan CanCollide dan aktifkan Anchored.
Kemudian duplikat bagian Coin beberapa kali dan sebar duplikat tersebut di sekitar pulau dan di platform sehingga dapat dijangkau dari level tumpukan laut.
Pertahankan setiap duplikat dengan nama Coin.

Buat skrip

Selanjutnya, Anda akan membuat koin merespons pemain. Mesin Roblox dapat mendeteksi ketika sesuatu menyentuh koin, tetapi Anda perlu menggunakan skrip untuk menentukan bagaimana koin harus bereaksi.

Buat CoinService

Di ServerScriptService, buat Skrip bernama CoinService dengan kode berikut:
```lua
-- Menginisialisasi layanan dan variabel
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
-- Mendefinisikan penangan acara
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Pemain menyentuh koin
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Pemain mengumpulkan koin")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Mengatur pendengar acara
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end
```

Sekarang, kapan pun seorang pemain menyentuh sebuah koin, koin tersebut menghilang selama 10 detik, dan log output mencetak Pemain mengumpulkan koin.

Bagian berikut menjelaskan cara kerja skrip dengan lebih mendetail.

Inisialisasi layanan dan variabel

Seperti dengan banyak kode yang mungkin telah Anda tulis dalam bahasa lain, Anda mendefinisikan variabel yang Anda perlukan nanti di bagian atas skrip. Kode kami melakukan hal-hal berikut:

  • Mendapatkan instansi layanan - Layanan Roblox menyediakan fungsionalitas bawaan untuk fitur umum. Skrip pertama-tama memperoleh instansi dari layanan Workspace, yang berisi setiap objek di dunia 3D, dan layanan Player, yang mengelola dan berisi semua pemain yang terhubung ke permainan Anda.
  • Mendapatkan referensi ke semua koin - Skrip kemudian mengquery ruang kerja 3D untuk semua referensi objek koin dengan metode GetChildren(). Metode ini mengembalikan array yang berisi semua yang diparent ke objek yang diasosiasikan, yang dalam hal ini adalah folder Workspace.World.Coins yang Anda buat sebelumnya.
  • Mendefinisikan variabel global - Variabel COOLDOWN digunakan nanti untuk menentukan berapa lama untuk menonaktifkan koin setelah dikumpulkan.
Menginisialisasi Layanan dan Variabel

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
...

Mendefinisikan penangan acara

Mesin Roblox secara fisik mensimulasikan dunia 3D dan menangani banyak logika untuk menangani acara yang terkait dengan rendering, fisika, dan jaringan. Ketika Anda tertarik untuk membuat logika Anda sendiri selama beberapa dari acara-acara ini, Anda dapat mendengarkan dan menangani mereka, sementara membiarkan mesin melakukan yang lainnya. Dalam hal ini, Anda mendengarkan dan menangani acara yang terkait dengan koin yang disentuh. Skrip mendefinisikan logika untuk menangani acara ini di metode onCoinTouched(), yang melakukan hal berikut:

  • Mendeteksi apakah koin diaktifkan - Setiap Instance memiliki atribut boolean Enabled yang mendefinisikan apakah objek tersebut ada di dunia 3D atau tidak. Anda dapat mengambil atribut instance dengan metode GetAttribute().
  • Mendeteksi apakah pemain menyentuh koin - Jika suatu koin diaktifkan, metode ini menggunakan layanan pemain untuk memeriksa apakah objek yang menyentuh koin memang seorang pemain. Ketika terjadi acara sentuhan, Mesin Roblox mengoper objek yang menyentuh koin sebagai parameter otherPart. Skrip memeriksa untuk melihat apakah parent dari otherPart adalah milik seorang pemain.
  • Menonaktifkan koin jika seorang pemain menyentuhnya, dan mengaktifkannya kembali setelah 10 detik - Akhirnya, jika seorang pemain menyentuh koin, metode ini menonaktifkan koin, menunggu selama 10 detik, dan kemudian mengaktifkan kembali koin untuk dikumpulkan. task.wait() digunakan alih-alih wait() karena memberikan kinerja yang lebih baik dengan tidak menghentikan eksekusi kode sepenuhnya, memungkinkan tugas di thread lain berjalan secara bersamaan.
Mendefinisikan Penangan Acara

local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Pemain menyentuh koin
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Pemain mengumpulkan koin")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Hubungkan penangan acara

Semua objek 3D yang disimulasikan mewarisi dari BasePart dan dengan demikian memiliki acara Touched(). Loop berikut menghubungkan penangan onTouchedEvent() ke setiap acara sentuh koin dengan melakukan hal-hal berikut:

  • Loop melalui semua koin - Loop melalui masing-masing koin menggunakan iterasi umum.
  • Menghubungkan penangan ke acara - Dalam setiap iterasi loop, koin diaktifkan secara default, sehingga terlihat di dunia 3D selama awal permainan. Metode penangan onCoinTouched() juga terhubung ke acara Touched dari koin sehingga dijalankan setiap kali acara tersebut terjadi. Ketika mesin mendeteksi sentuhan, ia juga mengoper objek yang menyentuh objek, otherPart.
Menghubungkan Penangan Acara

for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end

Uji coba mekanik

Pilih Test dari dropdown dan klik Play. Gerakkan karakter Anda untuk menyentuh sebuah koin. Jika semuanya bekerja dengan baik, koin menghilang, jendela Output mencetak Pemain mengumpulkan koin, dan koin muncul kembali setelah 10 detik.

Jendela Output Studio yang menampilkan konfirmasi bahwa pemain mengumpulkan sebuah koin.
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.