このプロジェクトでは、コンディショナルステートメントを使用して、部品がリーダーボードにどの色で表示されるかによってポイントを与えたり、控除したりする部品を作成します。ブルーの場合は、プレイヤーにいくつかのポイントを与えます。グリーンの場合は、ポイントを多くのポイントを取り除きます。最後に、赤の場合は、ポイントを取り除
プロジェクトのセットアップ
ポイントが関連するプロジェクトに追加できます。たとえば、プレイヤーがポイントを集める冒険ゲームなどです。
ポイントトラッキング
このプロジェクトをセットアップするには、ポイントを追跡するリーダーボードと、色を変更するパーツが必要です。リーダーボードのコードは提供されます。
Create a new script in ServerScriptService named Leaderboard. コードをスクリプトにコピーして挿入する。
--In ServerScriptService で、以下のコンテンツでスクリプトを作成します。PlayerSetup という名前です。local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- インターバルの値の例local points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- PlayerAdded イベントが発動したときに実行するPlayers.PlayerAdded:Connect(onPlayerJoin)
色変更パーツ
スクリプトは、パーツのための 3つの異なる色を繰り返します。各色には、RGB 値を保存する変数があり、データ型が含まれている 3つの数字 (赤、緑、青) で構成された色を作成します。
スクリプトを含む名前付きのパートを、PointScript という名前の下に作成します。
In PointScript では、script.Parent を使用して、パーツに参照します。
local pointPart = script.Parent変数を作成して異なる色を格納します。各変数は Color3.fromRGB() に設定されている必要があります。これは、色値を作成します。
- ブルー (いくつかのポイント): (0, 0, 255)
- 緑 (多くのポイント): (0、255、0)
- レッド (ポイントを失う): (255, 0, 0)
local pointPart = script.Parent-- 色local blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)小さな量のポイント、大きな量のポイント、そして削除ポイントの 3 つの変数を追加します。
-- 色local blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- ポイント数local smallPoints = 10local largePoints = 50local losePoints = 100
プレイヤーサービスを追加する
ポイントを付与するには、プレイヤーの情報にアクセスする必要があります。これは、[プレイヤー] の下の [Explorer] の中にあり、キャラクターオブジェクトとは別です。ここには、リーダーボード統計などの情報があります。
プレイヤー サービスをスクリプトに追加することで、 サービス は、Roblox エンジニアが作成したプレバルモードの追加セットを保存するために作成されます。
次のコマンドを入力して Players サービスを取得します。
local Players = game:GetService("Players")
-- ポイント数local smallPoints = 10local largePoints = 50local losePoints = 100-- 必要なサービスlocal Players = game:GetService("Players")
機能とイベント
ポイントスクリプトには 2つの関数が必要です。最初の関数は部品を与えると部品を控除します。2つ目の関数は、プレイヤーが部品に触れているかどうかをチェックします。これらの関数は、部品がタッチされるたびに触れイベントを実行するため、タッチイベントと関連付けられます。
新しい関数を作成し、givePoints() という名前のパラメータを追加します。内部で、テスト用のプリントステートメントを追加します。
local Players = game:GetService("Players")-- ポイントを加えるまたは控除するlocal function givePoints(player)print("Giving player points")endその下に、 partTouched() という名前の second 関数を作成し、 otherPart という名前のパラメータを持つ。
-- ポイントを加えるまたは控除するlocal function givePoints(player)print("Giving player points")end-- プレイヤーが部品に触れたかどうかをチェックしますlocal function partTouched(otherPart)end機能の内部で、関数 GetPlayerFromCharacter() を使用して他のパート変数にプレイヤーがあるかどうかをチェックします。
-- プレイヤーが部品に触れたかどうかをチェックしますlocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endプレイヤーがパーツに触れた場合、それはプレイヤー変数の中に保存されます。そうでない場合は、変数は空のままです。独自所有:
- 関数内で、プレイヤーが値を持っているかどうかをチェックします。持っている場合は、givePoints(player) を呼び出します。
- 機能の下に、partTouched() のタッチイベントに pointPart を接続します。
-- プレイヤーが部品に触れたかどうかをチェックしますlocal function partTouched(otherPart)-- 部品にタッチしたプレイヤーを取得するlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)プロジェクトを実行する プロジェクト。プレイヤーがパーツに触れるたびに、出力ウィンドウにメッセージが表示され、メッセージは次のとおりです: "Giving player points" トラブルシューティングのヒント
- Check that "Players" 在 game:GetService("Players") は大文字であり、斜めになっています。
- partTouched() は、ポイントパーツの Touched イベントに接続する必要があります。
ループカラーを作成
色をループするには、スクリプトは数秒ごとにパーツの色を変更する while = ループを使用します。このループのコンディションは、 true であるため、無限に実行できます。
スクリプトの終わりに、コンディションが true であるループを作成します。つまり、ループは常に実行されます。
-- プレイヤーが部品に触れたかどうかをチェックしますlocal function partTouched(otherPart)-- 部品にタッチしたプレイヤーを取得するlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- 色を通してループwhile true doend独所有のコードで、ポイントパーツを作成した色変数に変更するループを作成します。task.wait() を使用して、コードの間のバージョンを確認します。完了したら、コードを Library.task.wait にチェックします。
-- 3つの色をループし、それぞれの色の間を待ちますwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endすべての 3 色のループをプレイテストして確認します。
トラブルシューティングのヒント
この時点で、色のループが意図通りに機能しない場合は、次の 1つを試してください。
- スクリプトの 下 にある while ループ が正しく実行されているかどうかをチェックします。ループが下にある場合、スクリプトの他の部分が正しく実行されません。
- 内のすべての色が Color3.fromRGB() の内容を確認してください。コマを使用して、0 から 255 の間の 3つの数字が必要です。例えば、 (255, 50, 0) です。
プレイヤーにポイントを与える
プレイヤーには、パーツにタッチするときに現在のパーツの色に基づくポイントが与えられます。
現在の色を見つける
プレイヤーがパーツに触れるたびに、スクリプトは後でポイントを割り当てるためにパーツの現在の色を知る必要があります。
Find givePoints() 。この変数は、ポイントパーツの現在の色に変更するテストメッセージを変更します。この変数は、プレイヤーが得る (または失う) ポイントの数を決定します。
local function givePoints(player)local currentColor = pointPart.Colorendプレイヤーのポイントに影響を与えるには、その機能にはリーダーボードへのアクセスが必要です。変数を作成して保存します。
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")end次に、プレイヤーのポイント値を取得する変数を追加し、これは彼らのリーダーボードの子です。
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
ポイントを与えるまたは控除する
次に、if という文字列を使用して、部品の色に応じてポイントを加えたり減らしたりできます。色が青の場合は、青で提供する小さな量、緑の場合は多く提供し、赤の場合はポイントを減らします。
givePoints() の下の変数の下で、if 文を使用して現在の色がブルーであるかどうかをチェックし、そうである場合は smallPoints をプレイヤーの現在のポイント値に追加します。
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendend緑をチェックするには、 condition を追加します。緑である場合は、player's ポイントに largePoints 変数を追加します。
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendels のパラメーターが blue または green でない場合、ポイントを減算するために別の文を使用します。
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsend最後に、 destroy パートを含む if 文の後に、スクリプトがポイントを与え続けることができないようにします。
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()プレイテストし、各色が期待通りにポイントを与えるかどうかを確認してください。すべての 3 コンディションをテストしてください。
プレイヤーにフィードバックを与える
ポイントパーツは機能しますが、プレイヤーは自分のリーダーボードを見ていないため、何かが起きたことに気づかない可能性があります。これを修正するには、ポイントパーツが破壊されるとパーティクルを作成します。
プレイヤーがパーツ、例えばサウンド、振動、またはパーティクルを使用すると、オブジェクトに対するインタラクションがプレイヤーにより満足度が向上します。
パーティクルエフェクトを作成する
パーティクルエフェクトは、部品にタッチすると同じ色になります。これらの色は変数に保存されたので、簡単に再使用できます。
In givePoints() の下で、新しい ParticleEmitter インスタンスを作成します。インスタンス名を正確にスペルしてください。
local particle = Instance.new("ParticleEmitter")endパーティクルエミッターは、色のプロパティを制御するために色のシーケンスを使用します。新しい色のシーケンスを作成し、現在のパーツの色をパスします。
-- パーツを破壊するpointPart:Destroy()-- パーティクルを作成local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)パーティクルは、それを触ったプレイヤーに親を持つ必要があります。変数を作成してプレイヤーのキャラクターモデルを取得します。その後、パーティクルをプレイヤーの頭に親にします。
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Use task.wait() クイックに、そしてパーティクルを破壊する。
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()ゲームをプレイテストし、パーティクルが各色に触れた後にプレイヤーに従うかどうかを確認してください。
トラブルシューティングのヒント
この時点で、パーティクルが期待通りに機能しない場合は、以下の 1つを試してください。
- ParticleEmitter が正確に と表示されているように、新しいインスタンスを作成するときは、 正確に を使用してください。
- パーティクルの親にするときは、: を使用して playerCharacter と WaitForChild() の間にスペースを使用しないでください。
完全なポイントスクリプト
スクリプトの完成したバージョンは、以下に参照できます。
local pointPart = script.Parent
--ローカルストレージ = ゲーム:GetService("ServerStorage")
-- いくつかのポイントを与えます
local blue = Color3.fromRGB(0, 0, 255)
-- より多くのポイントを付与する
local green = Color3.fromRGB(0, 255, 0)
-- プレイヤーをポイントを失わせる
local red = Color3.fromRGB(255, 0, 0)
-- プレイヤーに与えられた金
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- 部品の色に基づいてプレイヤーにゴールドを与える
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- パーツを破壊し、2 秒後にパーティクルを破壊する
pointPart:Destroy()
-- スパークルエフェクトを作成し、破壊します
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- 変数に基づいてパーツの色を変更します。スクリプトの下部になければなりません。
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end