Tworzenie drużyn pozwala na sortowanie graczy w grupy, które rywalizują w celu osiągnięcia wspólnego celu, takiego jak zdobycie największej liczby punktów lub przekroczenie linii mety przed innymi członkami drużyny wroga. W przypadku strzelanek pierwszoosobowych tworzenie drużyn jest szczególnie ważne, ponieważ ustanawia złożone, skoordynowane strategie rozgrywki, które wykraczają poza umiejętności pojedynczego gracza.
Korzystając z przykładowej gry w laser tag jako odniesienia, ta sekcja samouczka nauczy cię, jak sortować graczy w drużyny, w tym wskazówki dotyczące skryptów na temat:
- Wykorzystania domyślnej funkcjonalności usługi Teams do przypisywania graczy do drużyny zielonej lub różowej.
- Pomagania graczom w odróżnianiu sojuszników od członków drużyny wroga za pomocą wskaźników drużynowych na ekranie i w grze.
- Umożliwienia wybaczającej rozgrywki, która nie karze graczy za rażenie swoich sojuszników.
Po ukończeniu tej sekcji dowiesz się o skryptach, które pozwalają graczom na pojawianie się lub respawn w neutralnym lobby lub strefie respawnu drużyny, dostosowywaniu wizualizacji pola siłowego w widoku pierwszoosobowym oraz zarządzaniu stanem klienta zarówno z serwera, jak i z klienta.

Przypisz kolory drużyn
Przykładowa gra w laser tag wykorzystuje usługę Teams jako podstawę do tworzenia dwóch drużyn, ponieważ usługa ta oferuje wbudowane zachowanie sortowania drużyn, które działa w zasadzie od razu. Na przykład, bez dodatkowego wysiłku w skryptach, usługa obsługuje takie działania jak:
- Równomierne sortowanie i balansowanie graczy w każdej drużynie.
- Grupowanie graczy pod ich drużyną na tablicy wyników.
- Zabarwianie nazw graczy w przestrzeni 3D na kolor odpowiadający ich drużynie.
- Pojawianie się graczy w odrębnych lokalizacjach respawnu, do których tylko ich drużyna ma dostęp.
Dzięki tej domyślnej funkcjonalności, przykładowa gra włącza usługę Teams, a następnie używa dwóch odrębnych obiektów Team z różnymi wartościami właściwości Team.Color, aby reprezentować każdą drużynę: miętowa dla drużyny, która zbiera się po jednej stronie mapy, oraz różowa dla drużyny, która zbiera się po przeciwnej stronie mapy. Te konkretne kolory są użyteczne, ponieważ są komplementarne, co oznacza, że dobrze kontrastują ze sobą, a gracze mogą łatwo skanować swoje otoczenie i orientować się w budynku oraz wśród innych graczy.




Ważne jest, aby zwrócić uwagę na dokładną nazwę BrickColor dla właściwości Team.Color, ponieważ gra używa tej nazwy w wielu skryptach, aby śledzić graczy, gdy sortują się w drużyny, zwiększać punkty, gdy gracze eliminują wrogich graczy podczas rundy, oraz aktualizować niestandardowe elementy UI. Na przykład, gdy runda się zaczyna, ReplicatedStorage ⟩ HUDGuiSetup wymaga startSyncingTeamColor oraz startSyncingTeamPoints, które obie odnoszą się do Team.Color, aby wykonać unikalne działania dla każdej drużyny.
startSyncingTeamColor odnosi się do Team.Color, aby przypisać odpowiedni kolor i ikonę dla wskaźnika drużyny gracza w lewym dolnym rogu ich ekranu.


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)
endWyświetlanie wskaźników drużyn
Gdy gracz zostanie przypisany do drużyny, musi być w stanie szybko zrozumieć, do której drużyny należy, oraz odróżnić sojuszników od członków drużyny wroga. Ta umiejętność jest ważna, ponieważ rozgrywka w grze strzelance pierwszoosobowej wymaga od graczy podejmowania szybkich decyzji strategicznych w strefach walki, aby nie zostali wyeliminowani i nie przegrali rundy.
Aby przygotować graczy do sukcesu, przykładowa gra w laser tag zapewnia wiele wskaźników drużynowych zarówno na ekranie, jak i w przestrzeni 3D:
- Wskaźnik Gracza – Niestandardowy interfejs UI na ekranie, który wyświetla kolor drużyny gracza i ikonę.
- Wskaźnik Drużyny – Niestandardowy interfejs UI w grze, który wyświetla kolor drużyny gracza.
- Wskaźnik Tablicy Wyników – Domyślny interfejs UI usługi Teams, który grupuje graczy pod ich kolorem drużyny.
- Zabarwienie Nazwy – Domyślny interfejs UI usługi Teams, który zabarwia nazwisko gracza nad jego głową na kolor drużyny.




Nie musisz robić żadnej dodatkowej pracy dla Wskaźnika Tablicy Wyników ani Zabarwienia Nazwy poza przypisaniem kolorów drużyn z poprzedniej sekcji samouczka, ale niestandardowe wskaźniki UI drużyn wymagają więcej wysiłku programistycznego, aby zarówno wyświetlać wskaźniki, jak i zasłaniać wskaźniki wrogów, gdy są za ścianami. Aby uzyskać pełne wyjaśnienie skryptów, które kontrolują zachowanie niestandardowego UI, a także jak wdrożyć każdy element UI, zobacz Wskaźnik Gracza i Wskaźnik Drużyny z programu UI Curriculum.
Wyłącz ogień przyjazny
Podczas gdy niektóre gry strzelanki pierwszoosobowe karzą graczy, którzy rażą swoich sojuszników, przykładowa gra w laser tag pozwala na bardziej wybaczającą rozgrywkę, wyłączając ogień przyjazny. Ta decyzja projektowa pozwala wszystkim tylko zwiększać wynik drużyny, a nie odejmować od niego z powodu wypadków w grze.
Aby zrozumieć, jak przykładowa gra wdraża tę funkcjonalność, zbadaj, jak ServerScriptService ⟩ LaserBlastHandler ⟩ processTaggedPlayers ⟩ onPlayerTagged obsługuje zadawanie obrażeń oznaczonym graczom. Gdy serwer wykryje kolizję między wystrzałem gracza a innym graczem, wywołuje funkcję onPlayerTagged, aby zrozumieć, który gracz oddał strzał, który gracz został trafiony i ile obrażeń powinno zostać usunięte z zdrowia gracza w zależności od typu blastera.
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)Zanim zmniejszy zdrowie, skrypt najpierw weryfikuje, czy oznaczony gracz jest w tej samej drużynie co gracz, który wystrzelił. Jeśli są w tej samej drużynie, skrypt całkowicie ignoruje dane dotyczące wystrzału.
local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- Zablokuj ogień przyjazny
if isFriendly then
return
endJednak jeśli oznaczony gracz jest w drużynie wroga, gracz otrzymuje odpowiednią ilość obrażeń w zależności od typu blastera. Dodatkowo, jeśli gracz otrzyma wystarczająco dużo obrażeń, aby zostać wyeliminowanym, skrypt nagradza punkt drużynie gracza, który wystrzelił. Aby uzyskać więcej informacji na temat tego, jak przykładowa gra śledzi punkty, zobacz Dodaj rundy później w samouczku.
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 onPlayerTaggedJeśli teraz przetestujesz grę, wszyscy gracze będą losowo pojawiać się w dowolnej strefie respawnu na przeciwnych końcach areny, niezależnie od tego, do jakiej drużyny należą, co oznacza, że każda drużyna pojawi się tuż obok siebie.
Aby rozwiązać ten problem, w następnej sekcji samouczka nauczysz się o niestandardowej logice ograniczającej respawn drużyn do określonych lokalizacji respawnu, zarządzaniu stanem klienta, gdy gracze opuszczają obszar respawnu po wybraniu swojego blastera, oraz respawnowaniu graczy z powrotem do ich strefy respawnu lub obszaru lobby, gdy ich zdrowie osiągnie zero.