プレイヤーはコインを集めることができますが、死亡するとコインを失うことができますが、コインは何もしません。ゲームワールドのほとんどは、ジャンプして非常に高い位置にあることができませんので、このチュートリアルのセクションでは、ジャンプして非常に高い位置にあることができるように、ロジックを完了する方法を説明します。
アップグレードボタンを作成
Roblox の 2D インターフェイスは、通常、GUI コンポーネントのコレクション内の GUI コンテナ内の Class.TextButton コンポーネントで構成されています。この場合、TextButton コンテナ内の Class.TextButton のみが、ジャンプのアップグレード (5コイン) を表示している必要があり
GUI を作成するには:
- In the エクスプローラー ウィンドウ, add a new ReplicatedStorage にフォルダを新しく追加し, Instances にフォルダを名前を変更します。 1>ReplicatedStorage1> 内の任意のオブジェクトは、各プレイヤーの Roblox クライアントにアクセスできます。ここは、GUI が表示される場所です。
- Add a ScreenGUI object into the インスタンス folder.
- Select the ScreenGui object, then in the プロパティ window,
- Set 名前 to JumpPurchaseGui 。
- リスポーン を無効にすると、GUI がリスポーン時にプレイヤーに親化されます。
- In the Explorer ウィンドウ, TextButton を JumpPurchaseGui コンテナに挿入し、テキストボタンを 1> JumpButton1> に変更します。
- (オプション) ボタンの外観と位置を構成することで、ボタンの外観と位置をカスタマイズできます。単純な提案には、次のコンポーネントが含まれます:
- テキストプロパティを アップグレードジャンプ (5コイン) に設定します。
- TextSize プロパティを 25 に設定します。
- ボタンを右下に移動するために 1, 1 を設定し、 1, 0,1, 0 を設定してボタンを下に移動する。
このチュートリアルの後半で、プレイヤーの GUI にボタンを追加しますが、それにはボタンが機能するために必要なロジックとデータを定義する必要があります。
ジャンプパワーデータを定義
現在、 PlayerData モジュールスクリプトの各プレイヤーについて、コインの数だけが保存されます。 ジャンプパワー を同じ方法で保存し、更新する必要があります。因みに、Jump の関数は、変更されるデータに対して非
PlayerData モジュールスクリプトを更新してジャンピングパワーを保存する:
In the エクスプローラー window, open the PlayerData module script in ServerStorage .
スクリプトのコードを次のサンプルに置き換えて、各プレイヤーの既存の 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_DATAplayerData[tostring(player.UserId)] = datareturn dataendfunction PlayerData.getValue(player, key)return getData(player)[key]endfunction PlayerData.updateValue(player, key, updateFunction)local data = getData(player)local oldValue = data[key]local newValue = updateFunction(oldValue)data[key] = newValuereturn newValueendreturn PlayerData
ジャンプパワーデータを更新
PlayerData がジャンプ力を追跡できるようになりましたので、サーバー上でジャンプ力をアップリクエストレードするためのロジックを実装する必要があります。
サーバーとクライアントは、リモートイベント または リモート関数 を通じて通信できます。リモートイベントは、発射時には生成されませんが、リモート機能 は、返信を受信するまでに生成されます。この場合、クライアントは、サーバーがジャンプパワー
ジャンプアップグレードを実装するには:
In the エクスプローラー ウィンドウ, インスタンス フォルダを ReplicatedStorage の中に開きます。
リモート関数 を インスタンス フォルダに挿入し、 IncreaseJumpPowerFunction にリモート関数を名前変更します。あなたは常に 1>ReplicatedStorage1> でリモート関数を作成します、クライアントとサーバーがそれらにアクセスできるようになる必要があります。
In the Explorer window, select スタータープレイヤー ] .
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.
In the エクスプローラー ウィンドウ, 新しいスクリプトを ServerScriptService に挿入し, スクリプトを JumpService に変更名前を変更します。このスクリプトはジャンプアップグレードのロジックを含みます。
次のコードをデフォルトコードと交換します:
-- サービス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.IncreaseJumpPowerFunctionlocal JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAMElocal COIN_KEY_NAME = PlayerData.COIN_KEY_NAMElocal JUMP_POWER_INCREMENT = 30local JUMP_COIN_COST = 5local 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 thenhumanoid.JumpPower = newJumpPower-- ジャンプリーダーボードを更新Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)endendlocal function onPurchaseJumpIncrease(player)local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)if coinAmount < JUMP_COIN_COST thenreturn falseend-- プレイヤーのジャンプパワーを増加updateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- コインテーブルを更新するlocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- コインリーダーボードを更新Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- キャラクターが追加されるとプレイヤーのジャンプパワーをリセットするupdateJumpPower(player, function(_)return 0end)end-- PlayerAdded イベントに追加されるプレイヤーを初期化するfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- PlayerAdded イベントからのプレイヤーのノーマルな初期化local function onPlayerAdded(player)player.CharacterAdded:Connect(function()onCharacterAdded(player)end)endlocal function onPlayerRemoved(player)updateJumpPower(player, function(_)return nilend)endIncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncreasePlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)コード説明次のセクションでは、コードをより詳細に説明しています。
ジャンプパワーのデータを更新する - updateJumpPower() は、プレイヤー
サーバーリクエストを有効にする - サーバーリクエストを最初にチェックする - onPurchaseJumpIncrease() - 最初にプレイヤーがアップグレードを購入するために必要なコインの数を持っているかどうかを最初にチェックします。onPurchaseJumpIncrease() はクライアントからサーバーに
ボタンをプレイヤーGUIに追加
Class.ScreenGui オブジェクトは、プレイヤーの Class.PlayerGui オブジェクト に親切されている場合にのみ画面上に表示されます。デフォルトでは、これにはチャットウィンドウなどのシステムGUIが含まれます。現在、これは ReplicatedStorage でスクリプトを
プレイヤーが参加するときにボタンを GUI に追加するには:
In the Explorer window, create a Script in ReplicatedStorage .
スクリプトを選択し、 プロパティ ウィンドウで、
- Set 名前 to JumpButtonClickHandler 。
- RunContext を クライアント に設定します。これにより、エンジンは常にこのスクリプトをクライアントで実行してネットワーク通信を最適化します。
オープンスクリプトで、次のコードでデフォルトコードを置き換えます:
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGuilocal jumpButton = jumpPurchaseGui.JumpButtonlocal function onButtonClicked()local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)if not success then-- 購入した場合は、エラーメッセージが表示されますerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- プレイヤーの Gui に JumpPurchaseGui を追加するjumpPurchaseGui.Parent = playerGuiコード説明次のセクションでは、コードをより詳細に説明しています。
- GUI とサーバー機能の参照を取得する - 変数 IncreaseJumpPowerFunction 、 jumpPurchaseGui 、および 0> jumpButton0> は、機能と GUI が参照する GUI とサーバー機能を含みます。
- ボタンにハンドラーを接続する - Activated イベントは、マウス、タッチスクリーン、またはゲームパッドコンテキストのいずれかでサポートされています。マウスでクリック、タッチで、またはゲームパッドボタンをリリースすると、トリガーされ
プレイテスト
アップグレードボタンを使用してコインのジャンプアップグレードを購入できるようになりました。プロジェクトをテストするには:
メニューバーで プレイ ボタンをクリックします。Studio はプレイテストモードに入ります。
スクリプトが正しく動作すると、画面上にジャンプパワーを購入するボタンが表示されます。コインを集める前にボタンをクリックして、ジャンプパワーを追加で付与しないことを確認してください。コインを集めると、アップグレードがクリックしたときに機能します。
コードが完了したので、ゲームをコインの量と位置でバランスを取りましょう。ゲームが遅すぎると感じる場合は、コインを追加します。ゲームが速すぎると感じる場合は、コインを削除し、チャレンジングな場所に配置します。