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 koinDi 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 CoinServiceDi ServerScriptService, buat Skrip bernama CoinService dengan kode berikut:```lua-- Menginisialisasi layanan dan variabellocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Mendefinisikan penangan acaralocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Pemain menyentuh koincoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Pemain mengumpulkan koin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Mengatur pendengar acarafor _, coin in coins docoin: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 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 Variabellocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal 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.
