Buat tim

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Membuat tim memungkinkan Anda mengelompokkan pemain ke dalam grup yang bersaing untuk menyelesaikan tujuan bersama, seperti mencetak poin terbanyak atau melintasi garis finish sebelum anggota tim musuh lainnya. Untuk permainan tembak-menembak orang pertama, membuat tim sangat penting karena ini menetapkan strategi permainan yang kompleks dan terkoordinasi di luar kemampuan individu pemain mana pun.

Menggunakan permainan laser tag contoh sebagai referensi, bagian tutorial ini mengajarkan Anda cara mengelompokkan pemain ke dalam tim, termasuk panduan scripting tentang:

  • Menggunakan fungsionalitas default layanan Teams untuk menugaskan pemain ke tim hijau atau merah muda.
  • Membantu pemain membedakan antara sekutu mereka dan anggota tim musuh melalui indikator tim di layar dan dalam permainan.
  • Mengaktifkan gameplay yang memaafkan yang tidak menghukum pemain karena menyerang rekan satu tim mereka.

Setelah Anda menyelesaikan bagian ini, Anda akan mempelajari tentang skrip yang memungkinkan pemain untuk muncul atau respawn ke lobi netral atau zona spawn tim, menyesuaikan visual medan gaya orang pertama, dan menangani status klien baik dari server maupun klien.

Menetapkan warna tim

Permainan laser tag contoh menggunakan layanan Teams sebagai dasar untuk membuat dua tim karena layanan ini menawarkan perilaku pengelompokan tim bawaan yang secara luas berfungsi langsung. Misalnya, tanpa upaya scripting tambahan, layanan ini menangani tindakan seperti:

  • Mengelompokkan dan menyeimbangkan pemain secara merata ke dalam setiap tim.
  • Mengelompokkan pemain di bawah tim mereka di papan peringkat.
  • Mewarnai nama pemain di ruang 3D sesuai dengan warna tim mereka.
  • Memunculkan pemain ke lokasi spawn yang berbeda yang hanya dapat diakses oleh tim mereka.

Karena fungsionalitas default ini, contoh ini mengaktifkan layanan Teams, kemudian menggunakan dua objek Team yang berbeda dengan nilai properti Team.Color yang berbeda untuk mewakili setiap tim: mint untuk tim yang berkumpul di satu sisi peta, dan carnation pink untuk tim yang berkumpul di sisi berlawanan dari peta. Warna-warna spesifik ini berguna karena mereka saling melengkapi, yang berarti bahwa mereka saling kontras dengan baik, dan memungkinkan pemain untuk dengan mudah memindai lingkungan mereka dan mengorientasikan diri mereka di dalam bangunan dan kepada pemain lainnya.

Penting untuk mencatat nama BrickColor yang tepat untuk properti Team.Color karena permainan menggunakan nama ini di banyak skrip dalam permainan untuk melacak pemain saat mereka mengelompokkan ke dalam tim, menambah poin saat pemain menandai pemain musuh selama satu putaran, dan memperbarui elemen UI kustom. Misalnya, ketika putaran dimulai, ReplicatedStorageHUDGuiSetup memerlukan startSyncingTeamColor, dan startSyncingTeamPoints yang keduanya merujuk pada Team.Color untuk melakukan tindakan unik untuk setiap tim.

startSyncingTeamColor merujuk pada Team.Color sehingga dapat menetapkan warna dan ikon yang benar untuk indikator tim pemain di sudut kiri bawah layar mereka.

Tim Hijau
Tim Merah Muda
local function setPlayerTeamIcon(gui: ScreenGui)
for _, teamColorIcon in gui.PlayerDisplay.TeamIcons:GetChildren() do
local iconTeamColor = teamColorIcon:GetAttribute(GuiAttribute.teamColor)
teamColorIcon.Visible = localPlayer.TeamColor == iconTeamColor
end
end
local function startSyncingTeamColor(gui: ScreenGui)
setPlayerTeamIcon(gui)
localPlayer:GetPropertyChangedSignal("Team"):Connect(function()
setPlayerTeamIcon(gui)
end)
end

Tampilkan indikator tim

Setelah seorang pemain dikelompokkan ke dalam tim, mereka perlu dapat dengan cepat memahami tim mana yang mereka ikuti, dan membedakan antara sekutu mereka dan anggota tim musuh. Kemampuan ini penting karena gameplay dari permainan tembak-menembak orang pertama mengharuskan pemain untuk membuat keputusan strategis cepat saat mereka berada di zona pertempuran agar tidak ditandai keluar dan kehilangan putaran.

Untuk mempersiapkan pemain untuk sukses, permainan laser tag contoh menyediakan beberapa indikator tim baik di layar maupun di ruang 3D:

  • Indikator Pemain – UI kustom di layar yang menampilkan warna dan ikon tim pemain.
  • Indikator Tim – UI kustom dalam permainan yang menampilkan warna tim pemain.
  • Indikator Papan Peringkat – UI di layar layanan Tim default yang mengelompokkan pemain di bawah warna tim mereka.
  • Tinta Nama – UI dalam permainan layanan Tim default yang mewarnai nama pemain di atas kepala mereka sesuai dengan warna tim mereka.
Indikator di Layar
Indikator Pemain
Indikator Papan Peringkat
Indikator dalam Permainan
Indikator Tim
Tinta Nama

Anda tidak perlu melakukan pekerjaan tambahan untuk Indikator Papan Peringkat atau Tinta Nama di luar menetapkan warna tim dari bagian tutorial sebelumnya, tetapi indikator tim UI kustom memerlukan lebih banyak upaya pemrograman untuk menampilkan indikator dan menghalangi indikator musuh ketika mereka berada di belakang dinding. Untuk penjelasan lengkap tentang skrip yang mengontrol perilaku UI kustom, serta cara menerapkan setiap elemen UI itu sendiri, lihat Indikator Pemain dan Indikator Tim dari Kurikulum UI.

Nonaktifkan tembakan teman

Sementara beberapa permainan tembak-menembak orang pertama menghukum pemain yang menyerang rekan satu tim mereka, permainan laser tag contoh memungkinkan gameplay yang lebih memaafkan dengan menonaktifkan tembakan teman. Keputusan desain ini memungkinkan semua orang hanya meningkatkan skor tim mereka, tidak menguranginya karena kecelakaan gameplay.

Untuk memahami bagaimana contoh ini menerapkan fungsionalitas ini, periksa bagaimana ServerScriptServiceLaserBlastHandlerprocessTaggedPlayersonPlayerTagged menangani kerusakan pada pemain yang ditandai. Ketika server mendeteksi tabrakan antara tembakan pemain dan pemain lain, ia memanggil fungsi onPlayerTagged untuk memahami pemain mana yang menembakkan tembakan, pemain mana yang terkena tembakan, dan berapa banyak kerusakan yang harus dihilangkan dari kesehatan pemain sesuai dengan jenis blaster.

local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)

Sebelum mengurangi kesehatan, skrip pertama-tama memverifikasi apakah pemain yang ditandai berada di tim yang sama dengan pemain yang memulai tembakan. Jika mereka berada di tim yang sama, skrip mengabaikan data tembakan sepenuhnya.

local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- Larang tembakan teman
if isFriendly then
return
end

Namun, jika pemain yang ditandai berada di tim musuh, pemain tersebut menerima jumlah kerusakan yang sesuai berdasarkan jenis blaster. Selain itu, jika pemain menerima cukup kerusakan untuk ditandai keluar, skrip memberikan poin kepada tim pemain yang memulai tembakan. Untuk informasi lebih lanjut tentang bagaimana contoh ini melacak poin, lihat Tambahkan putaran di bagian tutorial selanjutnya.

local humanoid = character and character:FindFirstChild("Humanoid")
if humanoid and humanoid.Health > 0 then
local damage = math.min(damageAmount, humanoid.Health)
humanoid:TakeDamage(damage)
if humanoid.Health <= 0 then
Scoring.incrementScore(playerBlasted, 1)
end
end
end
return onPlayerTagged

Jika Anda menguji permainan sekarang, semua pemain akan muncul secara acak di salah satu zona spawn di ujung arena yang berlawanan terlepas dari tim mana yang mereka ikuti, yang berarti bahwa setiap tim akan muncul tepat di sebelah satu sama lain.

Untuk mengatasi masalah ini, bagian tutorial berikutnya mengajarkan Anda tentang logika kustom di balik membatasi spawning tim ke lokasi spawn tertentu, menangani status klien saat pemain meninggalkan area spawn setelah memilih blaster mereka, dan respawning pemain kembali ke zona spawn atau area lobi mereka ketika kesehatan mereka mencapai nol.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.