現在、プレイヤーはプラットフォームから落ちても何の影響もありません。このセクションでは、ゲームの水面と同じ高さに大きな透明な危険要素を作成する方法を説明します。プレイヤーが危険要素に落ちると、体力がゼロに減少し、ゲームの開始地点で再生されます。
基本的な水の危険要素を作成する
基本的な水の危険要素を作成Workspace > World の中に Hazards という名前の新しいフォルダーを作成します。Hazards フォルダーの中に、Size 825, 1, 576 および CFrame.Position 174, -6.5, 38 のブロックPartを Hazardという名前で作成して、パートが島やプラットフォームの周りの水を覆うようにします。透明度を 1 に設定してパートが見えないようにし、実際の水が危険要素として見えるようにし、CanCollide を無効にしてプレイヤーが水に落ちるようにし、Anchored を有効にして物理的に動かないようにします。
プレイヤーが危険要素に触れたときに検出する
危険要素は、Touched をリスニングし、プレイヤーの体力をゼロにするスクリプトを書くまで何も機能しません。
HazardServiceを作成ServerScriptServiceで、HazardServiceという名前のScriptを作成し、以下のコードを追加します:```lualocal Players = game:GetService("Players")local Workspace = game:GetService("Workspace")local hazardsFolder = Workspace.World.Hazardslocal hazards = hazardsFolder:GetChildren()local function onHazardTouched(otherPart)local character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.Health = 0endendendfor _, hazard in hazards dohazard.Touched:Connect(onHazardTouched)end```
コードの説明
HazardService は CoinService と多くの類似点があります。ただし、コインを集める代わりに、プレイヤーが危険要素に触れたとき、体力が0に設定されます。
ゲーム内の危険オブジェクトを自由に変更、追加、削除して、ユニークな障害物を作成してください。これらがすべて Hazards フォルダーに含まれている限り、コードループはすべての危険要素にイベントハンドラーを接続します。
プレイヤーライフサイクルに接続する
プレイヤーライフサイクルは、プレイヤーがゲーム内で参加、離脱、再生する際に発生するイベントを表します。各主要なライフサイクルイベントに対してロジックを実行するために、ハンドラーをこれらのイベントに接続する必要があります。
CoinServiceにライフサイクルハンドラーを追加ServerScriptServiceに、既存のCoinServiceスクリプトの最後に以下のコードを追加します(既存のコードを置き換えないでください — その後に追加してください):```lualocal function onPlayerAdded(player)-- プレイヤーのコインを0にリセットupdatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChildはプレイヤーループを停止させるので、以下は別スレッドで行う必要がありますtask.spawn(function()-- プレイヤーが死亡したときcharacter:WaitForChild("Humanoid").Died:Connect(function()-- プレイヤーのコインを0にリセットupdatePlayerCoins(player, function(_)return 0end)end)end)end)end-- PlayerAddedイベントに接続する前に追加されたすべてのプレイヤーを初期化for _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.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 にリセットされるはずです。