Sekarang Anda memiliki dunia 3D, bagian tutorial ini mengajarkan Anda cara menambahkan skrip pertama untuk mendefinisikan mekanisme pengumpulan koin.Mekanik ini memungkinkan pemain untuk mengumpulkan koin, dan menonaktifkan pengumpulan koin jika baru-baru ini dikumpulkan.
Buat koin
Sebelum Anda dapat menulis sesuatu, Anda perlu memiliki objek penempat di dunia untuk digunakan sebagai koin Anda.Seperti platform tumpukan laut yang Anda buat di bagian sebelumnya, koin bisa menjadi objek sederhana Part.
Untuk membuat koin:
Di jendela Explorer , tambahkan folder baru ke folder Dunia , lalu ganti namanya menjadi Koin .
Masukkan bagian silinder ke dalam folder Koin , lalu ganti nama bagian menjadi Koin .
Pilih bagian, lalu di jendela Properti ,
- Tetapkan Warna Bata ke Emas .
- Tetapkan Material ke Logam .
- Tetapkan Ukuran ke .
- Nonaktifkan CanCollide .Ini memberi tahu mesin bahwa bagian lain dapat melewati koin, artinya pemain dapat berjalan melalui koin untuk mengumpulkannya.
- Aktifkan Terikat .Ini memberi tahu mesin untuk tidak pernah mengubah posisi koin karena simulasi fisika terkait, artinya pemain dapat menyentuh koin tanpa memengaruhi lokasinya.
Duplikasikan beberapa koin lagi dan letakkan di sekitar peta untuk tujuan pengujian.
Bagian silinder Anda sekarang terlihat seperti koin dan mencegah simulasi fisika, tetapi Anda perlu menambahkan logika ke koin sehingga pemain dapat mengumpulkannya.
Buat skrip
Untuk memiliki koin dapat dikumpulkan, Anda ingin bereaksi terhadap pemain yang menyentuhnya.Mesin Roblox dapat memberi tahu Anda ketika sesuatu menyentuh koin, tetapi Anda perlu menyatakannya dalam skrip.Untuk membuat skrip:
Di jendela Explorer , hover over ServerScriptService dan klik tombol ⊕ . Menu konteks ditampilkan.
Dari menu konteks, pilih Skrip .Skrip baru ditampilkan di bawah ServerScriptService , yang memberi tahu mesin untuk menjalankan skrip di server, dan mencegah klien mengakses kode.
Ganti nama skrip menjadi CoinService .
Ganti kode default dengan kode berikut:
-- 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("Player collected coin")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)endSekarang, setiap kali pemain menyentuh koin, koin menghilang selama 10 detik, dan log output mencetak Player collected coin .
Penjelasan kodeBagian berikut menjelaskan bagaimana skrip bekerja secara lebih terperinci.
Memulai layanan dan variabel
Seperti dengan banyak kode yang mungkin Anda tulis dalam bahasa lain, Anda mendefinisikan variabel yang Anda butuhkan nanti di bagian atas skrip.Kode kami melakukan hal mengikuti:
Dapatkan referensi untuk semua koin - Skrip kemudian menanyakan ruang kerja 3D untuk semua referensi ke objek koin dengan metode GetChildren().Metode ini mengembalikan array yang berisi semua yang diwarisi ke objek yang terkait dengannya, yang dalam kasus ini adalah folder Workspace.World.Coins yang Anda buat sebelumnya.
Meng定义变量 global - Variabel COOLDOWN digunakan nanti untuk mendefinisikan 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...
Tentukan penangan acara
Mesin Roblox secara fisik menyimulasikan dunia 3D dan menangani banyak logika untuk menangani peristiwa terkait rendering, fisika, dan jaringan.Ketika Anda tertarik untuk menulis logika sendiri selama beberapa peristiwa ini, Anda dapat mendengarkan dan menanganinya, sementara membiarkan mesin melakukan sisanya.Dalam kasus ini, Anda mendengarkan dan menangani peristiwa yang terkait dengan koin yang disentuh.Skrip mendefinisikan logika untuk menangani peristiwa ini di metode onCoinTouched(), yang melakukan hal mengikuti:
Mendeteksi apakah koin diaktifkan - Setiap Instance memiliki atribut boolean Enabled yang menentukan apakah objek ada atau tidak di dunia 3D.Anda dapat mendapatkan atribut instansi dengan metode GetAttribute().
Mendeteksi apakah pemain menyentuh koin - Jika koin diaktifkan, metode menggunakan layanan pemain untuk memeriksa apakah objek yang menyentuh koin benar-benar pemain.Ketika terjadi peristiwa sentuhan, Roblox Engine memindahkan objek yang menyentuh koin sebagai parameter otherPart.Skrip memeriksa untuk melihat apakah orang tua dari otherPart milik pemain.
Menonaktifkan koin jika pemain menyentuhnya, dan mengaktifkannya kembali setelah 10 detik - Terakhir, jika pemain menyentuh koin, metode menonaktifkan koin, menunggu selama 10 detik, dan kemudian mengaktifkan koin untuk koleksi. task.wait() digunakan sebagai gantinya wait() karena memberikan kinerja yang lebih baik dengan tidak menghentikan eksekusi kode sepenuhnya, memungkinkan tugas di thread lain untuk dijalankan secara bersamaan.
Mendefinisikan Pengelola 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("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
Hubungkan penangan acara
Semua objek 3D simulasi yang diwarisi dari BasePart dan karena itu memiliki acara Touched().Lingkaran berikut menghubungkan penangan onTouchedEvent() ke setiap peristiwa sentuhan koin dengan melakukan hal mengikuti:
Loop melalui semua koin - Loop melalui masing-masing koin menggunakan iterasi umum.
Hubungkan penangan ke acara - Dalam setiap iterasi loop, koin diaktifkan secara default, sehingga terlihat di dunia 3D selama awal mulai pengalaman.Metode penangani onCoinTouched() juga terhubung ke acara Touched koin sehingga berjalan setiap kali acara terjadi.Ketika mesin mendeteksi sentuhan, itu juga melewati objek yang menyentuh objek, otherPart .
Menghubungkan Pengelola Acarafor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
Tes mekaniknya
Sudah waktunya untuk melihat apakah mekanisme koleksi koin berfungsi seperti yang diinginkan. Untuk menguji pengalaman Anda:
Di bilah alat, klik tombol Mainkan . Studio memasuki mode pengujian.
Pindahkan karakter Anda untuk menyentuh koin.Jika skrip Anda berfungsi dengan benar, jendela Output ditampilkan Player collected coin , dan koin menghilang selama 10 detik sebelum muncul kembali.