Takım oluşturma, oyuncuları ortak bir hedefi tamamlamak için rekabet eden gruplara ayırmanızı sağlar; örneğin, en çok puanı kazanmak veya diğer düşman takım üyelerinden önce bir bitiş çizgisini geçmek gibi. Birinci şahıs nişancı oyunları için takım oluşturma özellikle önemlidir çünkü bu, herhangi bir bireysel oyuncunun yetenek setinin ötesinde karmaşık, koordineli oyun stratejileri oluşturur.
örnek lazer tag oyunu referans alarak, bu öğretici bölümünde oyuncuları takımlara ayırmayı öğreneceksiniz; bu, aşağıdakileri içeren betik rehberliğini içerir:
- Oyuncuları yeşil veya pembe takıma atamak için Teams hizmetinin varsayılan işlevselliğini kullanma.
- Oyuncuların müttefiklerini ve düşman takım üyelerini ayırt etmelerine yardımcı olmak için ekranda ve oyundaki takım göstergeleri.
- Oyuncuların takım arkadaşlarını vurdukları için ceza almadıkları affedici bir oyun deneyimi sağlama.
Bu bölümü tamamladıktan sonra, oyuncuların tarafsız bir lobide veya takım doğma bölgesinde doğmasını veya yeniden doğmasını sağlayan betikleri, birinci şahıs kuvvet alanı görsellerini özelleştirmeyi ve sunucu ve istemci arasında istemci durumunu nasıl yöneteceğinizi öğreneceksiniz.

Takım renklerini atama
Örnek lazer tag oyunu, iki takım oluşturmak için Teams hizmetini temel alır çünkü bu hizmet, kutudan çıktığı gibi geniş ölçüde çalışan yerleşik takım sıralama davranışı sunar. Örneğin, ek bir betik çabası olmadan, hizmet aşağıdaki gibi eylemleri yönetir:
- Oyuncuları her takıma eşit şekilde sıralama ve dengeleme.
- Oyuncuları liderlik tablosunda kendi takımları altında gruplama.
- Oyuncu isimlerini 3D alanda karşılık gelen takım rengine tonlama.
- Oyuncuları yalnızca kendi takımlarının erişebileceği farklı doğma konumlarına yerleştirme.
Bu varsayılan işlevsellik nedeniyle, örnek Teams hizmetini etkinleştirir, ardından haritanın bir tarafında toplanan takım için nane ve haritanın diğer tarafında toplanan takım için karanfil pembe gibi farklı Team nesneleri ile temsil edilen iki ayrı takım oluşturur. Bu özel renkler, birbirleriyle iyi bir şekilde zıt oldukları için faydalıdır ve oyuncuların çevrelerini kolayca taramalarını ve binalar içinde ve diğer oyuncularla kendilerini yönlendirmelerini sağlar.




Team.Color özelliği için tam BrickColor adını not etmek önemlidir çünkü oyun, oyuncuları takımlara ayırırken, bir tur sırasında düşman oyuncuları etiketledikçe puanları artırırken ve özel UI öğelerini güncellerken bu adı birçok betikte kullanır. Örneğin, bir tur başladığında, ReplicatedStorage ⟩ HUDGuiSetup startSyncingTeamColor ve startSyncingTeamPoints gerektirir; her ikisi de her takım için benzersiz eylemler gerçekleştirmek üzere Team.Color'a atıfta bulunur.
startSyncingTeamColor, oyuncunun ekranının sol alt köşesindeki takım göstergesi için doğru rengi ve simgeyi atamak üzere Team.Color'a atıfta bulunur.


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)
endTakım göstergelerini görüntüleme
Bir oyuncu bir takıma ayrıldığında, hangi takıma ait olduğunu hızlı bir şekilde anlaması ve müttefikleri ile düşman takım üyeleri arasında ayrım yapabilmesi gerekir. Bu yetenek önemlidir çünkü birinci şahıs nişancı oyununun oynanışı, oyuncuların savaş alanlarında hızlı stratejik kararlar vermelerini gerektirir, böylece etiketlenip turu kaybetmezler.
Başarı için oyuncuları hazırlamak amacıyla, örnek lazer tag oyunu ekranda ve 3D alanda birden fazla takım göstergesi sağlar:
- Oyuncu Göstergesi – Oyuncunun takım rengini ve simgesini gösteren özel ekran içi UI.
- Takım Göstergesi – Oyuncunun takım rengini gösteren özel oyun içi UI.
- Liderlik Tablosu Göstergesi – Oyuncuları kendi takım renkleri altında gruplandıran varsayılan Takımlar hizmeti ekran içi UI.
- İsim Tonu – Oyuncunun başının üzerinde takım rengine tonlanan varsayılan Takımlar hizmeti oyun içi UI.




Liderlik Tablosu Göstergesi veya İsim Tonu için önceki bölümdeki takım renklerini atamaktan başka ek bir çalışma yapmanıza gerek yoktur, ancak özel UI takım göstergeleri, göstergeleri görüntülemek ve düşman göstergelerini duvarların arkasında gizlemek için daha fazla programlama çabası gerektirir. Özel UI davranışını kontrol eden betikler ve her UI öğesini nasıl uygulayacağınız hakkında tam bir açıklama için, UI Müfredatındaki Oyuncu Göstergesi ve Takım Göstergesi bölümlerine bakın.
Dost ateşini devre dışı bırakma
Bazı birinci şahıs nişancı oyunları, kendi takım arkadaşlarını vuran oyuncuları cezalandırırken, örnek lazer tag oyunu dost ateşini devre dışı bırakarak daha affedici bir oyun deneyimi sağlar. Bu tasarım kararı, herkesin yalnızca takım puanını artırmasına, oyun kazaları nedeniyle puan düşürmemesine olanak tanır.
Örneğin, örneğin ServerScriptService ⟩ LaserBlastHandler ⟩ processTaggedPlayers ⟩ onPlayerTagged betiği, etiketlenen oyunculara zarar vermeyi nasıl yönettiğini inceleyin. Sunucu, bir oyuncunun patlaması ile başka bir oyuncu arasında bir çarpışma tespit ettiğinde, onPlayerTagged fonksiyonunu çağırarak hangi oyuncunun patlamayı ateşlediğini, hangi oyuncunun patlamadan etkilendiğini ve ne kadar hasar alması gerektiğini anlamaya çalışır.
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)Sağlığı azaltmadan önce, betik önce etiketlenen oyuncunun patlamayı başlatan oyuncu ile aynı takımda olup olmadığını doğrular. Eğer aynı takımda iseler, betik patlama verilerini tamamen göz ardı eder.
local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- Dost ateşi yasakla
if isFriendly then
return
endAncak, eğer etiketlenen oyuncu düşman takımda ise, oyuncu patlayıcı türüne göre uygun miktarda hasar alır. Ayrıca, oyuncu yeterince hasar alırsa ve etiketlenirse, betik patlamayı başlatan oyuncunun takımına bir puan kazandırır. Örnek puan takibi hakkında daha fazla bilgi için, öğreticinin ilerleyen bölümlerinde Turlar ekle bölümüne bakın.
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 onPlayerTaggedEğer şu anda oyunu test etseniz, tüm oyuncular rastgele olarak arenanın karşı uçlarındaki doğma bölgelerinde doğacaklar, bu da her takımın hemen yan yana doğacağı anlamına geliyor.
Bu sorunu ele almak için, öğreticinin sonraki bölümü, takım doğumunu belirli doğma konumlarıyla sınırlamak, oyuncular blaster'larını seçtikten sonra doğma alanından ayrıldıklarında istemci durumunu yönetmek ve sağlıkları sıfıra ulaştığında oyuncuları doğma bölgelerine veya lobilerine yeniden doğurma hakkında özel mantığı öğretir.