Proyek ini akan menggunakan pernyataan kondisional untuk membuat sebuah bagian yang akan memberikan atau mengurangi poin di papan skor tergantung pada warna bagian tersebut saat disentuh. Jika biru, maka akan memberikan sedikit poin kepada pemain. Jika hijau, maka akan memberikan banyak poin. Terakhir, jika merah, maka akan mengurangi poin.
Siapkan proyek
Bagian yang memberikan poin dapat ditambahkan ke dalam proyek apa pun di mana poin relevan. Misalnya, sebuah permainan petualangan di mana pemain mengumpulkan poin.
Pelacakan poin
Untuk menyiapkan proyek ini, Anda memerlukan papan skor untuk melacak poin dan sebuah bagian yang berubah warna. Kode untuk papan skor akan disediakan.
Buat skrip baru di ServerScriptService bernama Leaderboard. Salin dan tempel kode di bawah ini ke dalam skrip.
--Di ServerScriptService, buat skrip bernama PlayerSetup dengan konten di bawah.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Contoh dari IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Jalankan onPlayerJoin ketika event PlayerAdded terjadiPlayers.PlayerAdded:Connect(onPlayerJoin)
Bagian yang mengubah warna
Skrip ini akan berputar melalui tiga warna berbeda untuk bagian tersebut. Setiap warna akan memiliki variabel untuk menyimpan nilai RGB-nya, sebuah tipe data yang mencakup serangkaian tiga angka (merah, hijau, biru) yang membuat warna.
Buat sebuah bagian bernama PointPart dengan skrip terlampir bernama PointScript.
Di PointScript, gunakan script.Parent untuk merujuk ke bagian tersebut.
local pointPart = script.ParentBuat variabel untuk menyimpan warna yang berbeda. Setiap variabel harus diatur ke Color3.fromRGB(), yang membuat nilai warna.
- Biru (Beberapa Poin): (0, 0, 255)
- Hijau (Banyak Poin): (0, 255, 0)
- Merah (Hilang 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 poin yang kecil, jumlah poin yang lebih besar, dan satu untuk mengurangi 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
Tambahkan layanan pemain
Untuk memberikan poin, Anda perlu mengakses informasi pemain yang disimpan di Explorer di bawah Players, dan terpisah dari objek karakter. Di sinilah informasi seperti statistik papan skor dapat ditemukan.
Anda dapat melakukannya dengan menambahkan layanan Players ke dalam skrip Anda. Layanan adalah tambahan set fungsi yang telah dibuat oleh insinyur Roblox untuk menghemat waktu Anda.
Dapatkan layanan Players dengan mengetik:
local Players = game:GetService("Players")
-- Nilai poinlocal smallPoints = 10local largePoints = 50local losePoints = 100-- Layanan yang dibutuhkanlocal Players = game:GetService("Players")
Fungsi dan event
PointScript akan memerlukan dua fungsi. Fungsi pertama akan memberikan dan mengurangi poin. Fungsi kedua akan memeriksa apakah seorang pemain telah menyentuh bagian tersebut. Fungsi-fungsi ini kemudian akan dihubungkan dengan event sentuh, yang dijalankan setiap kali bagian tersebut disentuh.
Buat fungsi baru bernama givePoints() dan parameter bernama player. Di dalamnya, tambahkan pernyataan cetak untuk digunakan dalam pengujian.
local Players = game:GetService("Players")-- Memberikan atau mengurangi poinlocal function givePoints(player)print("Memberikan poin kepada pemain")endDi bawah itu, buat fungsi kedua bernama partTouched() dengan parameter bernama otherPart.
-- Memberikan atau mengurangi poinlocal function givePoints(player)print("Memberikan poin kepada pemain")end-- Memeriksa apakah pemain menyentuh bagianlocal function partTouched(otherPart)endDi dalam fungsi ini, gunakan fungsi GetPlayerFromCharacter() untuk memeriksa apakah ada pemain di variabel otherPart.
-- Memeriksa apakah pemain menyentuh bagianlocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endJika seorang pemain menyentuh bagian tersebut, maka akan disimpan di dalam variabel player. Jika tidak, variabel tersebut akan tetap kosong. Secara mandiri:
- Di dalam fungsi, periksa apakah pemain memiliki nilai. Jika ada, maka panggil givePoints(player).
- Di bawah fungsi, hubungkan partTouched() ke event 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 tersebut. Setiap kali seorang pemain menyentuh bagian tersebut, Anda harus melihat pesan di jendela Output yang mengatakan: "Memberikan poin kepada pemain"
Tips Pemecahan Masalah:
- Periksa bahwa "Players" dalam game:GetService("Players") menggunakan huruf kapital dan dalam tanda kutip.
- partTouched() harus terhubung ke event Touched dari pointPart.
Buat Warna yang Berulang
Untuk mengulangi warna, skrip akan menggunakan loop while yang mengubah warna bagian setiap beberapa detik. Kondisi untuk loop ini akan selalu benar, sehingga dapat berjalan terus menerus.
Di akhir skrip, buatlah sebuah loop while baru di mana kondisinya adalah true, 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)-- Mengulangi warnawhile true doendSecara mandiri, buatlah kode loop while true do yang mengubah pointPart menjadi variabel warna yang telah Anda buat. Jangan lupa menggunakan task.wait() di antara warna. Setelah selesai, periksa kode Anda dengan versi di bawah.
-- Mengulangi 3 warna, menunggu di antara setiap warnawhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endUji permainan dan periksa bahwa semua tiga warna berulang tanpa henti.

Tips Pemecahan Masalah
Pada titik ini, jika pengulangan warna tidak bekerja seperti yang diharapkan, coba salah satu dari berikut ini.
- Periksa bahwa loop while berada di bawah skrip, di bawah event Touched. Jika loop tidak berada di bagian bawah, maka akan menghalangi bagian lain dari skrip berjalan dengan benar.
- Periksa bahwa setiap warna di dalam Color3.fromRGB() dituliskan dengan benar. Harus ada tiga angka antara 0 dan 255 yang dipisahkan oleh koma, seperti (255, 50, 0).
Berikan Poin kepada Pemain
Pemain akan diberikan poin berdasarkan warna saat ini dari bagian saat mereka menyentuhnya.
Temukan warna saat ini
Setiap kali seorang pemain menyentuh bagian tersebut, skrip perlu mengetahui warna saat ini dari bagian tersebut untuk memberikan poin nanti.
Temukan givePoints(). Ganti pesan pengujian Anda dengan variabel untuk warna saat ini dari pointPart. Variabel ini akan menentukan berapa banyak poin yang didapat (atau hilang) oleh pemain.
local function givePoints(player)local currentColor = pointPart.ColorendUntuk mempengaruhi poin pemain, fungsi tersebut perlu mengakses papan skor pemain. Buat variabel untuk menyimpannya.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endSekarang tambahkan variabel untuk mendapatkan nilai Points pemain, yang merupakan anak dari papan skor mereka.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Berikan atau Kurangi Poin
Selanjutnya, Anda akan menggunakan if dan elseif untuk memberikan atau mengurangi poin tergantung pada warna bagian saat disentuh. Ingat bahwa biru memberikan jumlah kecil, hijau memberikan banyak, dan merah mengurangi poin.
Di dalam givePoints(), di bawah variabel, gunakan pernyataan if untuk memeriksa apakah warna saat ini adalah biru dan jika ya, maka tambahkan smallPoints ke nilai poin saat ini 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 warna hijau, tambahkan kondisi else if. Jika warna hijau, maka tambahkan variabel largePoints ke poin pemain.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendGunakan pernyataan else untuk mengurangi poin jika pointsPart tidak biru maupun hijau.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendTerakhir, hancurkan bagian setelah pernyataan if sehingga skrip tidak bisa terus memberikan poin.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Uji permainan dan periksa bahwa setiap warna memberikan poin sesuai harapan. Pastikan untuk menguji semua tiga kondisi.
Berikan Umpan Balik kepada Pemain
PointPart bekerja, tetapi pemain mungkin tidak menyadari bahwa sesuatu telah terjadi kecuali mereka kebetulan melihat papan skor mereka. Perbaiki itu dengan membuat partikel saat PointPart dihancurkan.
Menambahkan umpan balik saat pemain menggunakan bagian, seperti suara, guncangan, atau partikel, membuat interaksi dengan objek lebih memuaskan bagi pemain.
Buat Efek Partikel
Efek partikel akan memiliki warna yang sama dengan bagian ketika disentuh. Karena warna tersebut disimpan dalam variabel, mudah untuk menggunakannya kembali.
Di givePoints() di bagian bawah, buat sebuah instance ParticleEmitter baru. Pastikan nama instance dieja persis seperti yang ditunjukkan.
local particle = Instance.new("ParticleEmitter")endParticleEmitters menggunakan urutan warna untuk mengontrol properti Warna mereka. Buat sebuah ColorSequence baru dan masukkan warna bagian saat ini.
-- Hancurkan bagianpointPart:Destroy()-- Buat partikellocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)Partikel perlu diparentkan ke pemain yang menyentuhnya. Buat variabel untuk mendapatkan model Karakter pemain. Kemudian, parentkan 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() selama satu 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()Uji permainan dan pastikan partikel mengikuti pemain untuk sementara setelah menyentuh setiap warna.
Tips Pemecahan Masalah
Pada titik ini, jika partikel tidak bekerja seperti yang diharapkan, coba salah satu dari berikut ini.
- Pastikan saat membuat instance baru bahwa ParticleEmitter dieja persis seperti yang ditunjukkan dan di dalam tanda kutip.
- Saat memparentkan partikel, pastikan untuk menggunakan : antara playerCharacter dan WaitForChild() tanpa spasi di antara.
Skrip PointScript Lengkap
Versi skrip yang telah selesai dapat dirujuk di bawah ini.
local pointPart = script.Parent
--local storage = 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)
-- poin 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 poin kepada 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 sesaat, dan kemudian hancurkan partikel
pointPart:Destroy()
-- Membuat 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. Harus berada di bawah skrip.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end