プレイヤーの危険要素を作成する

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。


現在、プレイヤーはプラットフォームから落ちても何の影響もありません。このセクションでは、ゲームの水面と同じ高さに大きな透明な危険要素を作成する方法を説明します。プレイヤーが危険要素に落ちると、体力がゼロに減少し、ゲームの開始地点で再生されます。

基本的な水の危険要素を作成する

基本的な水の危険要素を作成

Workspace > World の中に Hazards という名前の新しいフォルダーを作成します。
Hazards フォルダーの中に、Size 825, 1, 576 および CFrame.Position 174, -6.5, 38 のブロックPartを Hazardという名前で作成して、パートが島やプラットフォームの周りの水を覆うようにします。
透明度を 1 に設定してパートが見えないようにし、実際の水が危険要素として見えるようにし、CanCollide を無効にしてプレイヤーが水に落ちるようにし、Anchored を有効にして物理的に動かないようにします。

プレイヤーが危険要素に触れたときに検出する

危険要素は、Touched をリスニングし、プレイヤーの体力をゼロにするスクリプトを書くまで何も機能しません。

HazardServiceを作成

ServerScriptServiceで、HazardServiceという名前のScriptを作成し、以下のコードを追加します:
```lua
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local hazardsFolder = Workspace.World.Hazards
local hazards = hazardsFolder:GetChildren()
local function onHazardTouched(otherPart)
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
end
for _, hazard in hazards do
hazard.Touched:Connect(onHazardTouched)
end
```

HazardServiceCoinService と多くの類似点があります。ただし、コインを集める代わりに、プレイヤーが危険要素に触れたとき、体力が0に設定されます

ゲーム内の危険オブジェクトを自由に変更、追加、削除して、ユニークな障害物を作成してください。これらがすべて Hazards フォルダーに含まれている限り、コードループはすべての危険要素にイベントハンドラーを接続します。

プレイヤーライフサイクルに接続する

プレイヤーライフサイクルは、プレイヤーがゲーム内で参加、離脱、再生する際に発生するイベントを表します。各主要なライフサイクルイベントに対してロジックを実行するために、ハンドラーをこれらのイベントに接続する必要があります。

CoinServiceにライフサイクルハンドラーを追加

ServerScriptServiceに、既存のCoinServiceスクリプトの最後に以下のコードを追加します(既存のコードを置き換えないでください — その後に追加してください):
```lua
local function onPlayerAdded(player)
-- プレイヤーのコインを0にリセット
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChildはプレイヤーループを停止させるので、以下は別スレッドで行う必要があります
task.spawn(function()
-- プレイヤーが死亡したとき
character:WaitForChild("Humanoid").Died:Connect(function()
-- プレイヤーのコインを0にリセット
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- PlayerAddedイベントに接続する前に追加されたすべてのプレイヤーを初期化
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)
```

このコードは、適切なライフサイクルイベント中にコインカウントをリセットするための関数を定義しています:

  • Players.PlayerAdded は、プレイヤーがゲームに参加するときに発生し、コインカウントを 0 に設定します。
  • Player.CharacterAdded は、プレイヤーのキャラクターモデルがワールドに追加されたときに発生します。これは PlayerAdded の後に発生し、プレイヤーが再生するたびにトリガーされます。
  • Humanoid.Died は、プレイヤーが死亡したときに発生し、コインカウントを 0 に設定します。 task.spawn() は、これを処理するための別スレッドを作成して、プレイヤーライフサイクルの他の側面が実行できるようにします。
  • Player.PlayerRemoved は、プレイヤーがゲームを離れたときに発生して、プレイヤーの状態をクリーンアップします。
  • このコードには、プレイヤーが Players.PlayerAdded イベントが実行される前にコインを収集し、その後コインカウントがゼロにリセットされる可能性があるという問題があります。この問題を緩和するために、コードのスケジューリングやプレイヤーのキャラクターを初期化が終了するまで凍結するなどの解決策を検討してください。ただし、これらの解決策は、このチュートリアルの範疇を超えるより複雑なスクリプティングの概念を含みます。

プレイテスト

ドロップダウンから Test を選択し、Play をクリックします。いくつかのコインを収集し、その後水に飛び込んでください。キャラクターは死亡し、開始地点で再生され、コインカウントは 0 にリセットされるはずです。

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。