アップグレードボタンをスクリプト

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


プレイヤーはコインを集めることができますが、死亡するとコインを失うことができますが、コインは何もしません。ゲームワールドのほとんどは、ジャンプして非常に高い位置にあることができませんので、このチュートリアルのセクションでは、ジャンプして非常に高い位置にあることができるように、ロジックを完了する方法を説明します。

アップグレードボタンを作成

Roblox の 2D インターフェイスは、通常、GUI コンポーネントのコレクション内の GUI コンテナ内の Class.TextButton コンポーネントで構成されています。この場合、TextButton コンテナ内の Class.TextButton のみが、ジャンプのアップグレード (5コイン) を表示している必要があり

GUI を作成するには:

  1. In the エクスプローラー ウィンドウ, add a new ReplicatedStorage にフォルダを新しく追加し, Instances にフォルダを名前を変更します。 1>ReplicatedStorage1> 内の任意のオブジェクトは、各プレイヤーの Roblox クライアントにアクセスできます。ここは、GUI が表示される場所です。
  2. Add a ScreenGUI object into the インスタンス folder.
  3. Select the ScreenGui object, then in the プロパティ window,
    1. Set 名前 to JumpPurchaseGui
    2. リスポーン を無効にすると、GUI がリスポーン時にプレイヤーに親化されます。
  4. In the Explorer ウィンドウ, TextButtonJumpPurchaseGui コンテナに挿入し、テキストボタンを 1> JumpButton1> に変更します。
  5. (オプション) ボタンの外観と位置を構成することで、ボタンの外観と位置をカスタマイズできます。単純な提案には、次のコンポーネントが含まれます:
    • テキストプロパティを アップグレードジャンプ (5コイン) に設定します。
    • TextSize プロパティを 25 に設定します。
    • ボタンを右下に移動するために 1, 1 を設定し、 1, 0,1, 0 を設定してボタンを下に移動する。

このチュートリアルの後半で、プレイヤーの GUI にボタンを追加しますが、それにはボタンが機能するために必要なロジックとデータを定義する必要があります。

ジャンプパワーデータを定義

現在、 PlayerData モジュールスクリプトの各プレイヤーについて、コインの数だけが保存されます。 ジャンプパワー を同じ方法で保存し、更新する必要があります。因みに、Jump の関数は、変更されるデータに対して非

PlayerData モジュールスクリプトを更新してジャンピングパワーを保存する:

  1. In the エクスプローラー window, open the PlayerData module script in ServerStorage .

  2. スクリプトのコードを次のサンプルに置き換えて、各プレイヤーの既存の Jump 値と一緒に、それぞれのプレイヤーの Coins 値を初期化します。


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    PlayerData.JUMP_KEY_NAME = "Jump"
    local playerData = {
    --]]
    [userId: string] = {
    ["Coins"] = coinAmount: number,
    ["Jump"] = jumpPower: number
    }
    --}]
    }
    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0,
    [PlayerData.JUMP_KEY_NAME] = 0,
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end
    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end
    return PlayerData

ジャンプパワーデータを更新

PlayerData がジャンプ力を追跡できるようになりましたので、サーバー上でジャンプ力をアップリクエストレードするためのロジックを実装する必要があります。

サーバーとクライアントは、リモートイベント または リモート関数 を通じて通信できます。リモートイベントは、発射時には生成されませんが、リモート機能 は、返信を受信するまでに生成されます。この場合、クライアントは、サーバーがジャンプパワー

ジャンプアップグレードを実装するには:

  1. In the エクスプローラー ウィンドウ, インスタンス フォルダを ReplicatedStorage の中に開きます。

  2. リモート関数 を インスタンス フォルダに挿入し、 IncreaseJumpPowerFunction にリモート関数を名前変更します。あなたは常に 1>ReplicatedStorage1> でリモート関数を作成します、クライアントとサーバーがそれらにアクセスできるようになる必要があります。

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. In the Explorer window, select スタータープレイヤー ] .

  4. In the プロパティ window, enable the CharacterUseJumpPower property. By default, a character's jump power value does not define the amount that a character jumps, so this needs to be enabled.

  5. In the エクスプローラー ウィンドウ, 新しいスクリプトを ServerScriptService に挿入し, スクリプトを JumpService に変更名前を変更します。このスクリプトはジャンプアップグレードのロジックを含みます。

  6. 次のコードをデフォルトコードと交換します:


    -- サービス
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- モジュール
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- イベント
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAME
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local JUMP_POWER_INCREMENT = 30
    local JUMP_COIN_COST = 5
    local function updateJumpPower(player, updateFunction)
    -- ジャンプパワーテーブルを更新
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- プレイヤーのジャンプパワーを更新
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- ジャンプリーダーボードを更新
    Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)
    end
    end
    local function onPurchaseJumpIncrease(player)
    local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)
    if coinAmount < JUMP_COIN_COST then
    return false
    end
    -- プレイヤーのジャンプパワーを増加
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- コインテーブルを更新する
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- コインリーダーボードを更新
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- キャラクターが追加されるとプレイヤーのジャンプパワーをリセットする
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- PlayerAdded イベントに追加されるプレイヤーを初期化する
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- PlayerAdded イベントからのプレイヤーのノーマルな初期化
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function()
    onCharacterAdded(player)
    end)
    end
    local function onPlayerRemoved(player)
    updateJumpPower(player, function(_)
    return nil
    end)
    end
    IncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncrease
    Players.PlayerAdded:Connect(onPlayerAdded)
    Players.PlayerRemoving:Connect(onPlayerRemoved)

    次のセクションでは、コードをより詳細に説明しています。

    • ジャンプパワーのデータを更新する - updateJumpPower() は、プレイヤー

    • サーバーリクエストを有効にする - サーバーリクエストを最初にチェックする - onPurchaseJumpIncrease() - 最初にプレイヤーがアップグレードを購入するために必要なコインの数を持っているかどうかを最初にチェックします。onPurchaseJumpIncrease() はクライアントからサーバーに

ボタンをプレイヤーGUIに追加

Class.ScreenGui オブジェクトは、プレイヤーの Class.PlayerGui オブジェクト に親切されている場合にのみ画面上に表示されます。デフォルトでは、これにはチャットウィンドウなどのシステムGUIが含まれます。現在、これは ReplicatedStorage でスクリプトを

プレイヤーが参加するときにボタンを GUI に追加するには:

  1. In the Explorer window, create a Script in ReplicatedStorage .

  2. スクリプトを選択し、 プロパティ ウィンドウで、

    1. Set 名前 to JumpButtonClickHandler
    2. RunContext を クライアント に設定します。これにより、エンジンは常にこのスクリプトをクライアントで実行してネットワーク通信を最適化します。
  3. オープンスクリプトで、次のコードでデフォルトコードを置き換えます:


    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local playerGui = player.PlayerGui
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGui
    local jumpButton = jumpPurchaseGui.JumpButton
    local function onButtonClicked()
    local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)
    if not success then
    -- 購入した場合は、エラーメッセージが表示されます
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- プレイヤーの Gui に JumpPurchaseGui を追加する
    jumpPurchaseGui.Parent = playerGui

    次のセクションでは、コードをより詳細に説明しています。

    • GUI とサーバー機能の参照を取得する - 変数 IncreaseJumpPowerFunctionjumpPurchaseGui 、および 0> jumpButton0> は、機能と GUI が参照する GUI とサーバー機能を含みます。
    • イベントハンドラーを定義する - onButtonClicked() は、ユーザーがアップグレードボタンをクリックするときのロジックを定義します。これは pcall() (保護されたコー
    • ボタンにハンドラーを接続する - Activated イベントは、マウス、タッチスクリーン、またはゲームパッドコンテキストのいずれかでサポートされています。マウスでクリック、タッチで、またはゲームパッドボタンをリリースすると、トリガーされ

プレイテスト

アップグレードボタンを使用してコインのジャンプアップグレードを購入できるようになりました。プロジェクトをテストするには:

  1. メニューバーで プレイ ボタンをクリックします。Studio はプレイテストモードに入ります。

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. スクリプトが正しく動作すると、画面上にジャンプパワーを購入するボタンが表示されます。コインを集める前にボタンをクリックして、ジャンプパワーを追加で付与しないことを確認してください。コインを集めると、アップグレードがクリックしたときに機能します。

コードが完了したので、ゲームをコインの量と位置でバランスを取りましょう。ゲームが遅すぎると感じる場合は、コインを追加します。ゲームが速すぎると感じる場合は、コインを削除し、チャレンジングな場所に配置します。