Proyek ini akan menggunakan pernyataan kondisional untuk menciptakan bagian yang akan memberikan atau mengurangi poin di papan peringkat tergantung pada warna bagian saat disentuh. Jika biru, maka akan memberikan beberapa poin kepada pemain. Jika hijau, maka akan memberikan banyak poin. Terakhir, jika merah, maka akan mengambil poin.
Mengatur Proyek
Bagian yang memberikan poin dapat ditambahkan ke proyek mana pun di mana poin relevan. kejadian, permainan petualangan di mana pemain mengumpulkan poin.
Pelacakan Titik
Untuk mengatur proyek ini, Anda akan memerlukan papan peringkat untuk melacak poin dan bagian yang berubah warna. Kode untuk papan peringkat akan diberikan.
Buat naskah baru di ServerScriptService bernama Leaderboard. Salin dan tempaste kode di bawah ini ke naskah.
--Di ServerScriptService, buat skrip bernama PlayerSetup dengan konten di bawah ini.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Contoh IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Lari padaPlayerJoin saat acara PlayerAdded berlariPlayers.PlayerAdded:Connect(onPlayerJoin)
Bagian Berubah Warna
Skrip akan berjalan melalui tiga warna berbeda untuk bagian. Setiap warna akan memiliki variabel untuk menyimpan nilai RGB-nya, jenis data yang mencakup set tiga angka (merah, hijau, biru) yang menciptakan warna.
Buat bagian bernama PointPart dengan nama script yang ditautkan PointScript.
Di PointScript, gunakan script.Parent untuk mengacu pada bagian.
local pointPart = script.ParentBuat variabel untuk menyimpan warna yang berbeda. Setiap variabel harus diatur ke Color3.fromRGB(), yang menciptakan nilai warna.
- Biru (Beberapa Poin): (0, 0, 255)
- Hijau (Banyak Titik): (0, 255, 0)
- Merah (Kalahkan Poin): (255, 0, 0)
local pointPart = script.Parent-- Warnalocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)Tambahkan variabel untuk jumlah kecil poin, jumlah poin yang lebih besar, dan ketiga untuk menghapus poin.
-- Warnalocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Nilai poinlocal smallPoints = 10local largePoints = 50local losePoints = 100
Menambahkan Layanan Pemain
Untuk mengumpulkan poin, Anda harus mendapatkan akses ke informasi pemain yang tersimpan di Explorer di bawah Pemain, dan ini berpisah dari objek karakter. Di sinilah informasi seperti statistik papan peringkat dapat ditemukan.
Anda dapat melakukannya dengan menambahkan layanan Pemain ke script Anda. Layanan adalah set tambahan dari fungsi pra-dibangun yang dibuat oleh insinyur Roblox untuk menghemat waktu Anda.
Dapatkan layanan Pemain dengan mengetik:
local Players = game:GetService("Players")
-- Nilai poinlocal smallPoints = 10local largePoints = 50local losePoints = 100-- Layanan yang dibutuhkanlocal Players = game:GetService("Players")
Fungsi dan Acara
PointsScript akan memerlukan dua fungsi. Fungsi pertama akan memberikan dan mengurangkan bagian. Fungsi kedua akan memeriksa apakah pemain telah menyentuh bagian tersebut. Fungsi ini kemudian akan terhubung dengan acara sentuh, yang berjalan setiap kali bagian itu disentuh.
Buat fungsi baru bernama givePoints() dan parameter bernama player . Di dalam, tambahkan pernyataan cetak untuk digunakan untuk pengujian.
local Players = game:GetService("Players")-- Menambah atau mengurangi poinlocal function givePoints(player)print("Giving player points")endDi bawah itu, buat fungsi kedua bernama partTouched() dengan parameter bernama otherPart.
-- Menambah atau mengurangi poinlocal function givePoints(player)print("Giving player points")end-- Memeriksa apakah pemain menyentuh bagianlocal function partTouched(otherPart)endDi dalam fungsi, gunakan fungsi GetPlayerFromCharacter() untuk memeriksa apakah ada pemain di variabel lainnya.
-- Memeriksa apakah pemain menyentuh bagianlocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endJika seorang pemain menyentuh bagian itu, itu akan disimpan di dalam variabel pemain. Jika tidak, variabel akan tetap kosong. Pada diri memiliki:
- Di dalam fungsi, periksa apakah pemain memiliki nilai. Jika ada, maka panggil givePoints(player) .
- Di bawah fungsi, hubungkan partTouched() ke acara Touched dari pointPart .
-- Memeriksa apakah pemain menyentuh bagianlocal function partTouched(otherPart)-- Mendapatkan pemain jika salah satu menyentuh bagianlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Jalankan proyek ini. Setiap kali seorang pemain menyentuh bagian ini, Anda harus melihat pesan di Jendela Keluar yang mengatakan: #Giving player points Tips Mengatasi Masalah:
- Periksa bahwa "Players" di game:GetService("Players") adalah bersarat dan dalam kutipan.
- partTouched() seharusnya terhubung ke acara pointPart's Touched .
Buat Warna Loop
Untuk berlari melalui warna, script akan menggunakan waktu = loop yang mengubah warna bagian setiap beberapa detik. Kondisi untuk loop ini akan benar, jadi itu bisa berjalan tanpa batas.
Pada akhir script, buat loop baru saat kondisi benar, yang berarti loop selalu berjalan.
-- Memeriksa apakah pemain menyentuh bagianlocal function partTouched(otherPart)-- Mendapatkan pemain jika salah satu menyentuh bagianlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Loop melalui warnawhile true doendPada dirimu memiliki, kode beberapa kali benar do loop yang mengubah pointPart menjadi variabel warna yang telah kamu buat. Jangan lupa untuk menggunakan task.wait() di antara warna. Saat selesai, periksa kode kamu terhadap versi di bawah ini.
-- Loop melalui 3 warna, menunggu di antara setiap warnawhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endMainkan-ujian dan periksa bahwa semua tiga warna loop tanpa berhenti.
Tips Troubleshoot
Pada titik ini, jika looping warna tidak berfungsi seperti yang diharapkan, coba salah satu dari berikut.
- Periksa bahwa while loop berada di bawah dari script, di bawah acara Touched. Jika loop tidak berada di bawah, itu akan menjaga bagian lain dari script berjalan dengan benar.
- Periksa bahwa setiap warna di dalam Color3.fromRGB() ditulis dengan benar. Harus ada tiga angka antara 0 dan 255 yang dipisahkan oleh koma, seperti (255, 50, 0) .
Memberi Poin Pemain
Pemain akan diberi poin berdasarkan warna saat ini dari bagian ketika mereka menyentuhnya.
Menemukan Warna Saat Ini
Setiap kali seorang pemain menyentuh bagian, skrip akan perlu mengetahui warna saat ini dari bagian untuk menghasilkan poin nanti.
Temukan givePoints() . Gunakan variabel ini untuk mengganti pesan pengujian Anda dengan variabel untuk warna poin saat ini. Variabel ini akan menentukan berapa banyak poin yang diterima pemain (atau kalah).
local function givePoints(player)local currentColor = pointPart.ColorendUntuk menghasilkan poin pemain, fungsi tersebut memerlukan akses ke papan peringkat pemain. Buat variabel untuk menyimpannya.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endSekarang tambahkan variabel untuk mendapatkan nilai Poin pemain, yang merupakan anak dari papan peringkat mereka.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Memberikan atau Mengurangkan Poin
Selanjutnya, Anda akan menggunakan if dan elif untuk memberikan atau mengurangkan poin tergantung pada warna bagian ketika disentuh. Ingat bahwa biru menyediakan jumlah kecil, hijau menyediakan banyak, dan merah mengurangi poin.
Di dalam givePoints() , di bawah variabel, gunakan if statement untuk memeriksa apakah warna saat ini adalah biru dan jika demikian maka tambahkan smallPoints ke nilai poin pemain.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendUntuk memeriksa untuk hijau, tambahkan varian jika kondisi. Jika hijau, maka tambahkan variabel largePoints ke poin pemain.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendGunakan pernyataan lain untuk mengurangkan poin jika poinPart bukan biru atau hijau.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendTerakhir, hancurkan bagian setelah pernyataan jika sehingga skrip tidak dapat terus memberikan poin.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Mainkan dan periksa bahwa setiap warna memberikan poin seperti yang diharapkan. Pastikan untuk menguji semua kondisi tiga .
Memberi Pemain Umpan Balik
PointPart bekerja, tetapi pemain mungkin tidak melihat sesuatu terjadi kecuali jika mereka berada di posisi papan peringkatmereka. Perbaiki itu dengan menciptakan partikel saat PointPart dihancurkan.
Menambahkan umpan balik saat pemain menggunakan bagian, seperti suara, goyangan, atau partikel, membuat interaksi dengan objek lebih memuaskan bagi pemain.
Membuat Efek Partikel
Efek partikel akan sama dengan warna bagian ketika disentuh. Karena warna-warna ini disimpan dalam variabel, mudah untuk menggunakannya kembali.
Pada givePoints() di bagian bawah, buat instansi ParticleEmitter baru. Pastikan nama instansi diucapkan dengan benar seperti yang ditunjukkan.
local particle = Instance.new("ParticleEmitter")endParticleEmitter menggunakan urutan warna untuk mengontrol propietas Warna mereka. Buat ColorSequens baru dan pas dalam warna bagian saat ini.
-- Hancurkan bagianpointPart:Destroy()-- Menciptakan partikellocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)Partikel akan perlu menjadi orang tua untuk pemain yang menyentuhnya. Buat variabel untuk mendapatkan model Karakter pemain. Kemudian, orang tua partikel ke kepala pemain.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Gunakan task.wait() untuk beberapa detik, lalu hancurkan partikel.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()Mainkan game ini dan pastikan partikelnya berikut pemain setelah menyentuh setiap warna.
Tips Troubleshoot
Pada titik ini, jika partikel tidak berfungsi sebagai yang diharapkan, coba salah satu dari berikut.
- Buat saat membuat instansi baru yang ParticleEmitter diucapkan tepat seperti yang ditunjukkan dan di dalam kutipan.
- Saat menyertakan partikel, pastikan untuk menggunakan : di antara playerCharacter dan WaitForChild() tanpa ruang antara.
Selesaikan PointScript
Versi lengkap dari script dapat diacak di bawah ini.
local pointPart = script.Parent
--penyimpanan lokal = game:GetService("ServerStorage")
-- Memberikan beberapa poin
local blue = Color3.fromRGB(0, 0, 255)
-- Memberikan lebih banyak poin
local green = Color3.fromRGB(0, 255, 0)
-- Membuat pemain kehilangan poin
local red = Color3.fromRGB(255, 0, 0)
-- emas yang diberikan kepada pemain
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Memberikan emas pemain berdasarkan warna bagian
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Hancurkan bagian, tunggu beberapa detik, dan kemudian hancurkan partikel
pointPart:Destroy()
-- Menciptakan efek kilau dan menghancurkannya
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Mengubah warna bagian berdasarkan variabel. Perlu berada di bawah script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end