ポイントを与えることなく実習する場合/If Practice with Giving Points

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

このプロジェクトでは、コンディショナルステートメントを使用して、部品がリーダーボードにどの色で表示されるかによってポイントを与えたり、控除したりする部品を作成します。ブルーの場合は、プレイヤーにいくつかのポイントを与えます。グリーンの場合は、ポイントを多くのポイントを取り除きます。最後に、赤の場合は、ポイントを取り除

プロジェクトのセットアップ

ポイントが関連するプロジェクトに追加できます。たとえば、プレイヤーがポイントを集める冒険ゲームなどです。

ポイントトラッキング

このプロジェクトをセットアップするには、ポイントを追跡するリーダーボードと、色を変更するパーツが必要です。リーダーボードのコードは提供されます。

  1. 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 = 0
    points.Parent = leaderstats
    end
    -- PlayerAdded イベントが発動したときに実行する
    Players.PlayerAdded:Connect(onPlayerJoin)

色変更パーツ

スクリプトは、パーツのための 3つの異なる色を繰り返します。各色には、RGB 値を保存する変数があり、データ型が含まれている 3つの数字 (赤、緑、青) で構成された色を作成します。

  1. スクリプトを含む名前付きのパートを、PointScript という名前の下に作成します。

  2. In PointScript では、script.Parent を使用して、パーツに参照します。


    local pointPart = script.Parent
  3. 変数を作成して異なる色を格納します。各変数は 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)
  4. 小さな量のポイント、大きな量のポイント、そして削除ポイントの 3 つの変数を追加します。


    -- 色
    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

プレイヤーサービスを追加する

ポイントを付与するには、プレイヤーの情報にアクセスする必要があります。これは、[プレイヤー] の下の [Explorer] の中にあり、キャラクターオブジェクトとは別です。ここには、リーダーボード統計などの情報があります。

プレイヤー サービスをスクリプトに追加することで、 サービス は、Roblox エンジニアが作成したプレバルモードの追加セットを保存するために作成されます。

  1. 次のコマンドを入力して Players サービスを取得します。

    local Players = game:GetService("Players")


    -- ポイント数
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- 必要なサービス
    local Players = game:GetService("Players")

機能とイベント

ポイントスクリプトには 2つの関数が必要です。最初の関数は部品を与えると部品を控除します。2つ目の関数は、プレイヤーが部品に触れているかどうかをチェックします。これらの関数は、部品がタッチされるたびに触れイベントを実行するため、タッチイベントと関連付けられます。

  1. 新しい関数を作成し、givePoints() という名前のパラメータを追加します。内部で、テスト用のプリントステートメントを追加します。


    local Players = game:GetService("Players")
    -- ポイントを加えるまたは控除する
    local function givePoints(player)
    print("Giving player points")
    end
  2. その下に、 partTouched() という名前の second 関数を作成し、 otherPart という名前のパラメータを持つ。


    -- ポイントを加えるまたは控除する
    local function givePoints(player)
    print("Giving player points")
    end
    -- プレイヤーが部品に触れたかどうかをチェックします
    local function partTouched(otherPart)
    end
  3. 機能の内部で、関数 GetPlayerFromCharacter() を使用して他のパート変数にプレイヤーがあるかどうかをチェックします。


    -- プレイヤーが部品に触れたかどうかをチェックします
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. プレイヤーがパーツに触れた場合、それはプレイヤー変数の中に保存されます。そうでない場合は、変数は空のままです。独自所有:

    • 関数内で、プレイヤーが値を持っているかどうかをチェックします。持っている場合は、givePoints(player) を呼び出します。
    • 機能の下に、partTouched() のタッチイベントに pointPart を接続します。

    -- プレイヤーが部品に触れたかどうかをチェックします
    local function partTouched(otherPart)
    -- 部品にタッチしたプレイヤーを取得する
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. プロジェクトを実行する プロジェクト。プレイヤーがパーツに触れるたびに、出力ウィンドウにメッセージが表示され、メッセージは次のとおりです: "Giving player points" トラブルシューティングのヒント

  • Check that "Players"game:GetService("Players") は大文字であり、斜めになっています。
  • partTouched() は、ポイントパーツの Touched イベントに接続する必要があります。

ループカラーを作成

色をループするには、スクリプトは数秒ごとにパーツの色を変更する while = ループを使用します。このループのコンディションは、 true であるため、無限に実行できます。

  1. スクリプトの終わりに、コンディションが true であるループを作成します。つまり、ループは常に実行されます。


    -- プレイヤーが部品に触れたかどうかをチェックします
    local function partTouched(otherPart)
    -- 部品にタッチしたプレイヤーを取得する
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- 色を通してループ
    while true do
    end
  2. 独所有のコードで、ポイントパーツを作成した色変数に変更するループを作成します。task.wait() を使用して、コードの間のバージョンを確認します。完了したら、コードを Library.task.wait にチェックします。


    -- 3つの色をループし、それぞれの色の間を待ちます
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. すべての 3 色のループをプレイテストして確認します。

トラブルシューティングのヒント

この時点で、色のループが意図通りに機能しない場合は、次の 1つを試してください。

  • スクリプトの にある while ループ が正しく実行されているかどうかをチェックします。ループが下にある場合、スクリプトの他の部分が正しく実行されません。
  • 内のすべての色が Color3.fromRGB() の内容を確認してください。コマを使用して、0 から 255 の間の 3つの数字が必要です。例えば、 (255, 50, 0) です。

プレイヤーにポイントを与える

プレイヤーには、パーツにタッチするときに現在のパーツの色に基づくポイントが与えられます。

現在の色を見つける

プレイヤーがパーツに触れるたびに、スクリプトは後でポイントを割り当てるためにパーツの現在の色を知る必要があります。

  1. Find givePoints() 。この変数は、ポイントパーツの現在の色に変更するテストメッセージを変更します。この変数は、プレイヤーが得る (または失う) ポイントの数を決定します。


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. プレイヤーのポイントに影響を与えるには、その機能にはリーダーボードへのアクセスが必要です。変数を作成して保存します。


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. 次に、プレイヤーのポイント値を取得する変数を追加し、これは彼らのリーダーボードの子です。


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    end

ポイントを与えるまたは控除する

次に、if という文字列を使用して、部品の色に応じてポイントを加えたり減らしたりできます。色が青の場合は、青で提供する小さな量、緑の場合は多く提供し、赤の場合はポイントを減らします。

  1. givePoints() の下の変数の下で、if 文を使用して現在の色がブルーであるかどうかをチェックし、そうである場合は smallPoints をプレイヤーの現在のポイント値に追加します。


    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
    end
    end
  2. 緑をチェックするには、 condition を追加します。緑である場合は、player's ポイントに largePoints 変数を追加します。


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. els のパラメーターが blue または green でない場合、ポイントを減算するために別の文を使用します。


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. 最後に、 destroy パートを含む if 文の後に、スクリプトがポイントを与え続けることができないようにします。


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. プレイテストし、各色が期待通りにポイントを与えるかどうかを確認してください。すべての 3 コンディションをテストしてください。

プレイヤーにフィードバックを与える

ポイントパーツは機能しますが、プレイヤーは自分のリーダーボードを見ていないため、何かが起きたことに気づかない可能性があります。これを修正するには、ポイントパーツが破壊されるとパーティクルを作成します。

プレイヤーがパーツ、例えばサウンド、振動、またはパーティクルを使用すると、オブジェクトに対するインタラクションがプレイヤーにより満足度が向上します。

パーティクルエフェクトを作成する

パーティクルエフェクトは、部品にタッチすると同じ色になります。これらの色は変数に保存されたので、簡単に再使用できます。

  1. In givePoints() の下で、新しい ParticleEmitter インスタンスを作成します。インスタンス名を正確にスペルしてください。


    local particle = Instance.new("ParticleEmitter")
    end
  2. パーティクルエミッターは、色のプロパティを制御するために色のシーケンスを使用します。新しい色のシーケンスを作成し、現在のパーツの色をパスします。


    -- パーツを破壊する
    pointPart:Destroy()
    -- パーティクルを作成
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. パーティクルは、それを触ったプレイヤーに親を持つ必要があります。変数を作成してプレイヤーのキャラクターモデルを取得します。その後、パーティクルをプレイヤーの頭に親にします。


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Use task.wait() クイックに、そしてパーティクルを破壊する。


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. ゲームをプレイテストし、パーティクルが各色に触れた後にプレイヤーに従うかどうかを確認してください。

トラブルシューティングのヒント

この時点で、パーティクルが期待通りに機能しない場合は、以下の 1つを試してください。

  • ParticleEmitter が正確に と表示されているように、新しいインスタンスを作成するときは、 正確に を使用してください。
  • パーティクルの親にするときは、: を使用して playerCharacterWaitForChild() の間にスペースを使用しないでください。

完全なポイントスクリプト

スクリプトの完成したバージョンは、以下に参照できます。


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