팀 생성은 플레이어를 그룹으로 정렬하여 공통 목표를 완료하도록 경쟁하게 해요. 예를 들어, 가장 많은 포인트를 획득하거나 다른 적 팀원보다 먼저 결승선을 넘는 등의 공통 목표를 달성하면 됩니다. 첫 번째 개인 플레이어에게는 팀 생성이
참조용으로 샘플 레이저 태그 경험을 사용하는 이 튜토리얼의 이 섹션에서는 스크립트 가이드를 포함한 플레이어를 팀으로 정렬하는 방법을 설명합니다.
- Class.Teams 서비스의 기본 기능을 사용하여 플레이어를 초록색 또는 분홍색 팀으로 할당합니다.
- 플레이어가 온-스크린 및 경험 내 팀 인디케이터를 통해 동맹국과 적 팀원을 구분하는 데 도움이 됩니다.
- 팀원을 폭력하여 플레이어에게 죄를 지우는 용서 게임플레이를 활성화합니다.
이 섹션을 완료하면 플레이어가 중립 로비나 팀 스폰 존에 생성하거나 다시 생성하는 스크립트, 첫 번째 인 퍼스트 필드 시각적 개체를 사용자 정의하고, 서버와 클라이언트 모두에서 클라이언트 상태를 처리하는 방법에 대해 알게 될 것입니다.
팀 색상 할당
샘플 레이저 태그 경험은 서비스가 넓게 사용 하 여 내장 팀 정렬 동작을 제공 하기 때문에 서비스를 기반로 하 여 두 팀을 만듭니다. 예를 들어, 추가 스크립트 작업이 없이 서비스는 다음과 같은 작동 하지 않는 팀을 처리 합니다.The sample laser tag experience uses the Teams service
- 플레이어를 각 팀으로 균등하게 정렬하고 밸런스를 맞춥니다.
- 리더보드플레이어를 그룹화합니다.
- 3D 공간에서 플레이어 이름을 해당 팀 색으로 염색합니다.
- 팀만 액세스할 수 있는 고유한 생성 위치에 플레이어를 생성합니다.
이 기본 기능 때문에 샘플은 Teams 서비스를 활성화하고 다른 Team 속성 값을 사용하여 각
경험에서 플레이어를 그룹화하고 경험 내에서 플레이어를 추적하고 업데이트하기
startSyncingTeamColor 참조 Team.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
팀 표시자 표시
플레이어가 팀으로 정렬되면 팀에 속해 있는 것을 빠르게 해독하고 팀과 동맹국 간에 구분할 수 있어야 합니다. 이 능력은 첫 번째 사람 샷 경험의 게임플레이에서 플레이어가 전략적인 결정을 내리는 것을 요구하므로 태그를 피하고 라운드를 잃지
플레이어를 완료대해 설정하려면 샘플 레이저 태그 경험은 스크린과 3D 공간에서 여러 팀 표시자를 제공합니다.
- 플레이어 표시기 – 플레이어의 팀 색과 아이콘을 표시하는 사용자 지정 온-스크린 UI.
- 팀 표시기 – 플레이어의 팀 색을 표시하는 사용자 지정 경험 내 UI.
- 순위표 표시기 – 플레이어를 팀 색 아래에 그룹화하는 기본 팀 서비스 UI.
- 이름 컬러 – 플레이어의 이름을 팀 색으로 변경하는 경험 내 기본 팀 서비스.
이 튜토리얼의 이전 섹션에서 팀 색상을 할당하는 것 외에 리더보드 표시기 또는 이름 옅은 필요하지 않지만, 사용자 인터페이스 팀 옅은 더 많은 프로그래밍 노력이 필요하여
친절한 불 끄기
일부 첫 번째 개인 샷 슈팅 경험은 플레이어가 자신의 팀원을 폭발시키면 플레이어를 처벌하지만, 샘플 레이저 태그 경험을 통해 플레이어는 친절한 불 사용을 비활성화하여 더 용서 게임 플레이를 할 수 있습니다. 이 디자인 결정은 모든 사람이 팀 점수를 올릴 수만 하고
샘플이 이 기능을 구현하는 방법을 이해하려면 ServerScriptService > LaserBlastHandler > processTaggedPlayers > 2> onPlayerTagged2> 에 대한 피해를 처리
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)
체력이 감소하기 전에 스크립트는 태그된 플레이어가 폭발을 시작한 플레이어와 동일한 팀에 있는지 확인합니다. 그들이 동일한 팀에 있으면 스크립트는 폭발 데이터를 완전히 무시합니다.
local character = playerTagged.Characterlocal isFriendly = playerBlasted.Team == playerTagged.Team-- 친절한 불 허용 금지if isFriendly thenreturnend
그러나 태그된 플레이어 는 적팀에 있는 경우, 플레이어는 블래스터 입력따라 적절한 양의 피해를 받습니다. 또한, 플레이어가 피해를 입어 태그가 되면 스크립트는 플레이어가 초기화한 팀에 포인트를 보상합니다. 또한, 샘
local humanoid = character and character:FindFirstChild("Humanoid")if humanoid and humanoid.Health > 0 thenlocal damage = math.min(damageAmount, humanoid.Health)humanoid:TakeDamage(damage)if humanoid.Health <= 0 thenScoring.incrementScore(playerBlasted, 1)endendendreturn onPlayerTagged
현재 경험을 테스트하면 모든 플레이어가 아레나의 양쪽 끝에 있는 랜덤 스폰 존에 생성됩니다. 즉, 모든 팀이 서로 다른 팀에 속하더라도 아레나의 양쪽 끝에 생성됩니다. 따라서 각 팀이 서로 다른 위치에 생성됩니다.
이 문제를 해결하기 위해 튜토리얼의 다음 섹션에서는 플레이어가 생성 지점에 도착할 때 특정 생성 지점에 대한 사용자 지정 논리, 클라이언트 상태를 처리하는 방법, 플레이어가 생성 지점에서 떠나면 생성 지점 또는 로비 영역으로 플레이어를 다시 가져오는 방법에 대해 설명합니다.