Sekarang Anda memiliki dunia 3D, bagian ini dari tutorial menunjukkan cara menambahkan skrip pertama Anda untuk mendefinisikan mekanik kumpulan koin. Meха ini memungkinkan pemain untuk mengumpulkan koin, dan menonaktifkan kumpulan koin jika telah baru-baru ini diumpulkan.
Buat Koin
Sebelum Anda dapat menulis apa pun, Anda perlu memiliki objek pengganti di dunia untuk menggunakan sebagai koin Anda. Seperti platform tumpukan laut yang Anda buat di bagian sebelumnya, koin dapat menjadi objek Part sederhana.
Untuk menciptakan koin:
Di jendela Explorer , tambahkan dossier baru ke dossier Dunia , lalu ganti nama itu Koin .
Sisipkan bagian silinder ke dalam Koin folder, lalu ganti nama bagian menjadi Koin .
Pilih bagian, lalu di jendela Properti ,
- Tetapkan WarnaBatu menjadi Emas .
- Tetapkan Bahan ke Logam .
- Tetapkan Ukuran ke 0.6, 8, 4 .
- Nonaktifkan Bisa Bertabrakan . Ini memberi tahu mesin bahwa bagian lain dapat melewati koin, yang berarti pemain dapat berjalan melalui koin untuk mengumpulkannya.
- Aktifkan Terancang . Ini memberi tahu mesin untuk tidak pernah mengubah posisi koin karena simulasi fisik apa pun, yang berarti pemain dapat menyentuh koin tanpa menyentuh lokasi koin.
Duplikasi beberapa koin lain 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 agar pemain dapat mengumpulkannya.
Buat Skrip
Untuk membuat koin dapat dikumpulkan, Anda ingin bereaksi terhadap pemain yang menyentuhnya. Mesin Roblox dapat memberitahu Anda ketika sesuatu menyentuh koin, tetapi Anda perlu menyatakan bahwa dalam naskah. Untuk membuat naskah:
Di jendela Explorer , geser atas ServerScriptService dan klik tombol ⊕ . Menu konteks ditampilkan.
Dari menu konteks, pilih Skrip. Sebuah skrip baru ditampilkan di bawah ServerScriptService, yang memberi tahu mesin untuk mengeksekuskan skrip di server, dan mencegah klien mengakses kode.
Ganti nama script 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 penangani 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 seorang pemain menyentuh koin, koin itu menghilang selama 10 detik, dan log keluaran menghasilkan Player collected coin .
Penjelasan KodeBagian berikut menjelaskan cara skrip bekerja lebih lanjut.
Menginisialisasi Layanan dan Variabel
Seperti dengan banyak kode yang mungkin Anda tulis dalam bahasa lain, Anda mendefinisikan variabel yang Anda butuhkan nanti di bagian atas script. Kode kami melakukan mengikuti:
Dapatkan referensi untuk semua koin - Skrip kemudian mengkonsultasi ruang kerja 3D untuk semua referensi ke objek GetChildren() - Metode ini mengembalikan array yang berisi semua yang diasosiasikan dengan objek yang dikaitkannya, yang dalam kasus ini adalah Workspace.World.Coins
Definisikan variabel global - Variabel COOLDOWN digunakan kemudian untuk menentukan berapa lama 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 Penangani Acara
Mesin Roblox secara fisik menyimulas dunia 3D dan menangani banyak logika untuk menangani acara yang terkait dengan render, fisika, dan jaringan. Saat Anda tertarik untuk menyelesaikan logika Anda sendiri selama beberapa acara ini, Anda dapat mendengarkan dan menangani mereka, sementara mesin mengambil alih sisanya
Mendeteksi apakah koin diaktifkan - Setiap Instance memilikiribut Enabled yang mendefinisikan apakah atau tidak objek ada di dunia 3D. Anda dapat mengambil instansi atribut dengan metode 0> Class.Instance:GetAttribute()|GetAttribute()0>.
Mendeteksi apakah seorang pemain menyentuh koin - Jika koin diaktifkan, metode menggunakan layanan pemain untuk memeriksa apakah objek yang menyentuh koin adalah pemain. Saat terjadi acara sentuh, Roblox engine mengevaluasi objek yang menyentuh koin sebagai parameter otherPart. Skrip memeriksa apakah orang t
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()
Mendefinisikan Penangani 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
Mengaktifkan Penangani Acara
Semua objek 3D yang disimulasikan mewarisi dari BasePart dan oleh karena itu memiliki acara Touched() . Loop berikut menghubungkan pengelola onTouchedEvent() ke setiap acara sentuh koin dengan melakukan mengikuti:
Loop melalui semua koin - Loop melalui masing-masing koin menggunakan general iterasi.
Hubungkan penangani ke acara - Dalam setiap putaran ulang dari loop, koin diaktifkan secara default, jadi itu terlihat di dunia 3D selama awal putaran. Metode onCoinTouched() penangani koin terhubung ke acara Touched koin se
Mengaktifkan Penangani Acarafor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
Mainkan Meханик
Saatnya untuk melihat apakah mekanik koleksi koin bekerja seperti yang diharapkan. Untuk menguji pengalaman Anda:
Di bilah menu, klik tombol Bermain . Studio memasuki mode pengujian.
Pindahkan karakter Anda untuk menyentuh koin. Jika skrip Anda bekerja dengan benar, jendela Output menunjukkan Player collected coin , dan koin itu menghilang selama 10 detik sebelum muncul kembali.