Buat mekanisme 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, 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:

  1. Di jendela Explorer , tambahkan folder baru ke folder Dunia , lalu ganti namanya menjadi Koin .

  2. Masukkan bagian silinder ke dalam folder Koin , lalu ganti nama bagian menjadi Koin .

    Studio's Explorer window with the Coin part highlighted. The hierarchy of the Workspace to World folder to Coins folder to Coin part is also highlighted.
  3. 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.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Duplikasikan beberapa koin lagi dan letakkan di sekitar peta untuk tujuan pengujian.

    Studio's Explorer window with multiple Coin parts highlighted under the Coins folder. A view of multiple coins on the island and two gray cylinder sea stacks.

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:

  1. Di jendela Explorer , hover over ServerScriptService dan klik tombol . Menu konteks ditampilkan.

  2. 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.

    Studio's Explorer window with both ServerScriptService's plus icon and Script object highlighted.
  3. Ganti nama skrip menjadi CoinService .

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Ganti kode default dengan kode berikut:


    -- 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("Player collected coin")
    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, setiap kali pemain menyentuh koin, koin menghilang selama 10 detik, dan log output mencetak Player collected coin .

    Bagian 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 instansi layanan - Layanan Roblox menyediakan fungsi bawaan untuk fitur umum.Skrip pertama mendapatkan instansi dari layanan Workspace , yang berisi setiap objek di dunia 3D, dan layanan Player , yang mengelola dan berisi semua pemain yang terhubung ke pengalaman Anda.

    • 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 Variabel

      local Workspace = game:GetService("Workspace")
      local Players = game:GetService("Players")
      local coinsFolder = Workspace.World.Coins
      local 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 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("Player collected coin")
      task.wait(COOLDOWN)
      coin.Transparency = 0
      coin:SetAttribute("Enabled", true)
      end
      end
      end

    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 Acara

      for _, coin in coins do
      coin: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:

  1. Di bilah alat, klik tombol Mainkan . Studio memasuki mode pengujian.

    Play button highlighted in Studio's playtesting options.
  2. 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.

    Studio's Output window that displays confirmation that the player collected a coin.