팀 생성

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

팀 생성은 플레이어를 그룹으로 정렬하여 최대 점수를 얻거나 다른 적 팀원보다 먼저 골선에 도달하는 등의 공통 목표를 달성하기 위해 경쟁하도록 하는 기능입니다. 1인칭 슈터 게임의 경우, 팀을 구성하는 것은 특히 중요합니다. 이는 개별 플레이어의 기술 세트를 넘어서는 복잡하고 조정된 게임 플레이 전략을 수립하기 때문입니다.

샘플 레이저 태그 경험을 참조하여 이 튜토리얼의 섹션에서는 다음과 같은 스크립팅 지침을 포함하여 플레이어를 팀으로 정렬하는 방법을 배울 수 있습니다:

  • Teams 서비스의 기본 기능을 사용하여 플레이어를 초록색 또는 분홍색 팀에 할당합니다.
  • 화면 내 및 경험 내 팀 지표를 통해 플레이어가 아군과 적 팀원을 구별할 수 있도록 도와줍니다.
  • 아군을 타격해도 플레이어에게 페널티를 부과하지 않는 관대한 게임 플레이를 가능하게 합니다.

이 섹션을 완료한 후 여러분은 플레이어가 중립 로비나 팀 스폰 구역에 스폰하거나 리스폰할 수 있도록 하는 스크립트, 1인칭 필드 시각 요소를 사용자 정의하고, 서버와 클라이언트 모두에서 클라이언트 상태를 처리하는 방법에 대해 배우게 됩니다.

팀 색상 할당

샘플 레이저 태그 경험은 Teams 서비스를 사용하여 두 팀을 생성하는 기준으로 삼습니다. 이 서비스는 기본적으로 팀 분류 동작을 지원하기 때문입니다. 예를 들어, 추가적인 스크립팅 노력 없이도 이 서비스는 다음과 같은 작업을 처리합니다:

  • 각 팀으로 플레이어를 고르게 정렬하고 균형을 유지합니다.
  • 리더보드에서 플레이어를 해당 팀 아래에 그룹화합니다.
  • 3D 공간에서 플레이어 이름을 해당 팀 색상으로 색칠합니다.
  • 플레이어를 그들 팀이 접근할 수 있는 고유 스폰 위치에 스폰합니다.

이 기본 기능 덕분에 샘플은 Teams 서비스를 활성화한 다음, 각 팀을 나타내기 위해 서로 다른 Team.Color 속성 값이 있는 두 개의 고유한 Team 객체를 사용합니다: 한쪽편에 집결하는 팀을 위한 민트와 반대편에 집결하는 팀을 위한 카네이션 핑크입니다. 이러한 특정 색상은 서로 잘 대비되어 플레이어가 주변을 쉽게 스캔하고 건물 내에서 다른 플레이어에 대한 방향을 잡는 데 유용합니다.

경험의 여러 스크립트에서 플레이어가 팀으로 정렬될 때 트래킹하고, 플레이어가 한 라운드에서 적 플레이어를 태그할 때 점수를 증가시키고, 사용자 정의 UI 요소를 업데이트하는 데 사용하기 때문에 Team.Color 속성의 정확한 BrickColor 이름이 중요합니다. 예를 들어 라운드가 시작되면, ReplicatedStorageHUDGuiSetupstartSyncingTeamColorstartSyncingTeamPoints를 요구합니다. 이 두 요소는 모두 각 팀에 대한 고유한 동작을 수행하기 위해 Team.Color를 참조합니다.

startSyncingTeamColorTeam.Color를 참조하여 플레이어의 팀 지표가 화면 왼쪽 하단에 올바른 색상과 아이콘으로 표시되도록 합니다.

초록색 팀
분홍색 팀

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

팀 지표 표시

플레이어가 팀으로 정렬되면, 그들이 어떤 팀에 속해 있는지를 빠르게 파악하고 아군과 적 팀원을 구별할 수 있어야 합니다. 이 능력은 1인칭 슈터 경험의 게임 플레이에서 중요합니다. 플레이어는 전투 지역에서 태그당하지 않도록 빠르게 전략적 결정을 내려야 하므로 필수적입니다.

플레이어의 성공을 위해 샘플 레이저 태그 경험은 화면 및 3D 공간에서 여러 팀 지표를 제공합니다:

  • 플레이어 지표 – 플레이어의 팀 색상과 아이콘을 표시하는 커스텀 화면 UI.
  • 팀 지표 – 플레이어의 팀 색상을 표시하는 커스텀 경험 내 UI.
  • 리더보드 지표 – 플레이어를 해당 팀 색상 아래에 그룹화하는 기본 Teams 서비스 화면 UI.
  • 이름 색상 – 플레이어 이름을 머리 위에서 팀 색상으로 색칠하는 기본 Teams 서비스 경험 내 UI.
화면 내 지표
플레이어 지표
리더보드 지표
경험 내 지표
팀 지표
이름 색상

리더보드 지표나 이름 색상에 대해서는 이전 섹션에서 팀 색상만 할당하면 추가 작업이 필요하지 않지만, 커스텀 UI 팀 지표는 지표를 표시하고 적 지표의 시야를 차단하기 위해 더 많은 프로그래밍 노력이 필요합니다. 커스텀 UI 동작을 제어하는 스크립트에 대한 전체 설명과 각 UI 요소를 구현하는 방법에 대해서는 UI 커리큘럼의 플레이어 지표팀 지표를 참조하세요.

아군 공격 비활성화

일부 1인칭 슈터 경험에서는 아군을 폭격하는 플레이어에게 페널티를 부과하지만, 샘플 레이저 태그 경험은 아군 공격을 비활성화하여 보다 관대한 게임 플레이를 허용합니다. 이 디자인 결정은 모든 플레이어가 점수를 줄이는 것이 아니라 팀 점수만 증가시킬 수 있도록 합니다.

샘플이 이 기능을 구현하는 방법을 이해하려면 ServerScriptServiceLaserBlastHandlerprocessTaggedPlayersonPlayerTagged가 태그된 플레이어에게 피해를 입히는 방법을 살펴보세요. 서버가 플레이어의 폭격과 다른 플레이어 간의 충돌을 감지하면, onPlayerTagged 함수를 호출하여 누가 폭탄을 발사했는지, 누가 폭탄을 맞았는지 및 어떤 피해가 플레이어의 생명에 얼마나 영향을 미치는지를 이해합니다.


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

생명력을 줄이기 전에, 스크립트는 태그된 플레이어가 폭탄을 발사한 플레이어와 같은 팀에 있는지를 먼저 확인합니다. 두 플레이어가 같은 팀이라면 스크립트는 폭탄 데이터 전부를 무시합니다.


local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- 아군 공격 비활성화
if isFriendly then
return
end

그러나 태그된 플레이어가 팀에 속한다면, 플레이어는 폭격 유형에 따라 적절한 양의 피해를 받습니다. 추가로, 플레이어가 충분한 피해를 받아 태그당하게 되면, 스크립트는 폭탄을 발사한 플레이어의 팀에 점수를 부여합니다. 샘플이 점수를 추적하는 방법에 대한 추가 정보는 후속 튜토리얼의 라운드 추가하기에서 확인할 수 있습니다.


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

지금 당장 경험을 테스트하면, 모든 플레이어가 소속된 팀과 관계없이 경기장의 양 끝에 있는 두 스폰 구역 중 한 곳에 무작위로 스폰됩니다. 이는 각 팀이 서로 바로 옆에 스폰되는 것을 의미합니다.

이 문제를 해결하기 위해, 다음 섹션에서는 팀 스폰을 특정 스폰 위치로 제한하고, 플레이어가 블래스터를 선택한 후 스폰 구역을 떠날 때 클라이언트 상태를 처리하고, 생명이 0에 도달하면 플레이어를 다시 스폰 구역이나 로비 영역으로 리스폰하는 방법에 대해 배우게 됩니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.