チームを作成すること は、プレイヤーをグループに整理して、共通の目標を達成するために競争することができます。たとえば、最も多くのポイントを獲得するか、他の敵チームメンバーより先にゴールを越えるなどです。ファーストパーソンシューターの場合、チームを作成することは特に重要です、因みに個々の
参照として使用する サンプルレーザータグエクスペリエンス は、スクリプトガイド付きのプレイヤーをチームにソートする方法を示しています:
- Class.Teams サービスのデフォルト機能を使用して、プレイヤーを緑またはピンクチームに割り当てる。
- プレイヤーが同盟国と敵チームメンバーをオンスクリーンとインエクスペリエンスチームインジケーターで異なるようにします。
- チームメートを爆破することでプレイヤーに懲罰を与えない、許すゲームプレイを有効にする。
このセクションを完了すると、プレイヤーが中立ロビーまたはチームスポーンゾーンにスポーンまたはリスポーンするスクリプト、最初の人称フォースフィールドビューをカスタマイズし、サーバーとクライアントの両方からクライアントステートを処理する方法について学びます。
チームカラーを割り当てる
サンプルレーザータグエクスペリエンスは、サービスが Teams を基本として、2つのチームを作成するために使用するサービスを使用します、因みにサービスは内蔵チームソート行動を提供し、箱庭で広く使用されています。たとえ、追加のスクリプトエクスペリエンスなしで、サービスは次のアクションを処理します:
- プレイヤーを各チームに均等にソートしてバランスを取ります。
- リーダーボードのスコアボードにあるプレイヤーをグループ化します。
- 3D 空間のプレイヤー名をチームのカラーに色付けする。
- チームのみがアクセスできる異なるスポーン場所にプレイヤーをスポーンする。
このデフォルトの機能により、サンプルは Teams サービスを有効にし、Team オブジェクトを 2つ異なる
エクスペリエンスでは、 Class.Team.Color プロパティの名前の正確な Datatype.BrickColor 名
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。
チームカラーを以前のチュートリアルのセクションから割り当てること以外のリーダーボードインジケーターまたは名前の色の追加のワークは必要ありませんが、カスタムUIチームインジケーターは、両方のインジケーターを表示し、敵のイ
友好の炎を無効にする
一部の第一者シューターエクスペリエンスは、プレイヤーがチームメイトを爆破することを懲罰しますが、サンプルレーザータグエクスペリエンスは、友好の炎を無効にすることで、より寛大なゲームプレイを可能にします。このデザインの決定は、ゲームプレイアクシデントによりチームスコアを減算することなく、すべての人がチームのスコアを増加
サンプルがこの機能を実装する方法を理解するには、ServerScriptService > LaserBlastHandler > 処理タグ付きプレイヤー > 2>onPlayerTagged2> タグがダメージ
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)
体力が減少する前に、スクリプトは最初にタグ付きのプレイヤーが爆発を起動したチームと同じチームにあるかどうかを確認します。タグ付きのプレイヤーが同じチームにある場合、スクリプトは爆発データを完全に無視します。
local character = playerTagged.Characterlocal isFriendly = playerBlasted.Team == playerTagged.Team-- 友好的な発射を禁止するif isFriendly thenreturnend
しかし、タグ付きのプレイヤー が敵チームにいる場合、プレイヤーはブラスタータイプに応じて適切な量のダメージを受け取ります。また、プレイヤーがタグアウトすると、スクリプトは、blaster タイプのチームにポイントを報酬を与えます。サンプルの追跡ポイントに関
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
今すぐエクスペリエンスをテストすると、すべてのプレイヤーがアリーナの両端にあるスポーンゾーンのいずれかにランダムにスポーンします。これにより、各チームが互いに隣接しているため、各チームがそれぞれ次の方法でスポーンします。
この問題に対処するために、チュートリアルの次のセクションでは、チームスポーンを特定のスポーン場所に制限するためのカスタムロジックについて教えています。プレイヤーがスポーンエリアを選択した後、ブラスターを選択すると、プレイヤーがスポーンエリアに到着すると、ロビーエリアまたはスポーンエリアにプレイヤーをリスポーンすること、プレイヤーの体力