このゲームの最後の段階であるバッグのアップグレードに入ります。バッグの容量を大きくするアップグレードを購入させることで、プレイヤーは1回の旅行でより多くのアイテムが収穫し、さらに多くのゴールドを獲得することができます。
ショップの作成
各ショップにはボタンがあり、プレイヤーがクリックすると、より大きなアイテムバッグを購入することができます。ショップ自体は、パーツにテキストが表示できる SurfaceGUI を追加したパーツになります。
サインの作成
- Workspace で、Shop という名前の新しいモデルを作成します。
- Shop の中に BuyButton という名前の新しいパーツを追加します。
- BuyButton で「+」 をクリックして、SurfaceGUI が表示されるまでスクロールし、それを追加します。
- さらに、SurfaceGUI の中に BuyText という名前の新しい TextLabel を追加します。パーツのどこかに小さなラベルが表示されます。
- パーツの作り方によっては、ラベルが別の場所にあることもあります。表示して欲しい面にテキストが表示されない場合は、SurfaceGUIのFaceプロパティを探します。テキストが表示されるまで、そのプロパティを変更します。
パーツによっては、Face プロパティが上記と異なる場合があります。
記号テキストの変更
現在 TextLabel は非常に小さく、プレイヤーには見えにくいかもしれません。拡大表示する必要があります。
- BuyText プロパティで、Sizeの横にある矢印をクリックします。X (左右) と Y (上下)のオフセットを 0 に変更します。
- X と Yのスケールを 0.5 に変更して、正方形を作成します。
- TextLabel プロパティを上にスクロールし、 AnchorPoint の左側にある矢印をクリックします。X と Y に 0.5 と入力します。これにより、ラベルの一部が見えなくなりますが、次に正しく配置します。
- プロパティを下にスクロールして、Positionを開きます。X と Y のスケールを 0.5 に変更して、ボックスが中央に配置されるようにします。
- BuyText プロパティで、下にスクロールしてテキストをわかりやすいものに変更します。
例: 「より大きなバッグを購入: 100 ゴールド」 - TextScaled を ON にします。これにより、ボックスに収まるようにテキストが自動的に拡大縮小されます。
クリック検出器の追加
プレイヤーは、ショップをタッチするだけでなく、クリックすることでアイテムを購入します。スクリプトは、プレイヤーが店の看板をクリックしたかどうかを判断するために、「クリック検出器」を使用します。クリック検出器とは、ユーザーがドアを開けるなど、環境中の何かとインタラクションできるようにするオブジェクトのことです。
- BuyButton に ClickDetector を追加します。これが「クリック検出器」です。
- BuyButton で、BuyScript という名前の新しいスクリプトを追加し、説明的なコメントを付けます。
- BuyScript で、ボタン部分とクリック検出器を格納する変数を作成します。
-- ボタンをクリックすると、バッグが増量するアップグレードを購入することができる
local buyButton = script.Parent
local clickDetector = buyButton.ClickDetector
- giveUpgrade()という名前の新しい関数を作成し、playerというパラメータを取得します。この関数は、プレイヤーがボタンをクリックするたびにバッグを増量させます。
local buyButton = script.Parent
local clickDetector = buyButton.ClickDetector
local function giveUpgrade(player)
end
- 関数終了の end の下に、clickDetector の MouseClick イベントを giveUpgrade() 関数に接続するように設定します。
local function giveUpgrade(player)
end
clickDetector.MouseClick:Connect(giveUpgrade)
- 関数をテストするために、 giveUpgrade() 内に print 文を追加します。
local function giveUpgrade(player)
print("Someone clicked the button.")
end
- テストプレイします。ボタンをクリックして、出力ウィンドウにテキストが表示されることを確認します。
クリック検出器には、プレイヤーが操作できる距離があります。この距離を変更するには、ClickDetector のプロパティ MaxActivationDistance を変更します。
トラブルシューティング
ボタンをクリックできないか、ボタンにマウスカーソルが表示されません。
- ClickDetector オブジェクトが、クリックしようとしているパーツの子であることを確認してください。
- キャラクターがボタンに十分近いことを確認してください。または、ツールが装備されていないことを確認してください。
アップグレードの購入
ボタンが動作するようになったら、今度は giveUpgrade にコードを追加して、アップグレードされたバッグと引き換えにプレイヤーのゴールドを減らすようにしましょう。
アップグレード変数の追加
各アップグレードには 2 つの変数があります。アップグレードする時の料金と、増量数です。
- BuyScript で、ローカルの clickDetectorの下に 2 つの変数を作成します。
- newSpace:アップグレードによって拡張される容量
- upgradeCost:1 回のアップグレードで必要な費用
-- アップグレード用変数
local newSpaces = 10
local upgradeCost = 100
アップグレードの付与
プレーヤーのバッグを増量する前に、十分なお金があるかどうかを確認する必要があります。その場合、スペースの最大量に追加します。
- giveUpgrade ()で、次のように入力してプレーヤーのリーダー統計を取得し、ゴールドとスペースの変数にアクセスできるようにします。
local function giveUpgrade(player)
print("Someone clicked the button")
-- プレイヤーのリーダーボードの取得
local playerStats = player:FindFirstChild("leaderstats")
-- リーダーボード内の Gold と Spaces オブジェクトの取得
local playerGold = playerStats:FindFirstChild("Gold")
local playerSpaces = playerStats:FindFirstChild("Spaces")
end
変数名が PlayerSetup スクリプトの変数名と同じであることを確認してください。
- スペースの変数を書き込んだ後、 playerGoldの値がアップグレード コスト以上かどうかを判断する if ステートメントを作成します。
local function giveUpgrade(player)
local playerStats = player:FindFirstChild("leaderstats")
local playerGold = playerStats:FindFirstChild("Gold")
local playerSpaces = playerStats:FindFirstChild("Spaces")
-- アップグレードのための資金が十分にあるかどうかをチェックする
if playerGold.Value >= upgradeCost then
end
end
- if 文で、プレーヤーのゴールドからアップグレードのコストを引きます。
if playerGold.Value >= upgradeCost then
-- プレイヤーのお金からアップグレード料を引く
playerGold.Value = playerGold.Value - upgradeCost
end
- さらに、バッグの容量を増やすために、増量数を加算します。
if playerGold.Value >= upgradeCost then
playerGold.Value = playerGold.Value - upgradeCost
playerSpaces.Value = playerSpaces.Value + newSpaces
end
- テストプレイし、リーダーボードを確認して、バッグの増量が機能したかどうかを確認します。
トラブルシューティング
この時点で、バッグの増量ができない場合は以下のいずれかを試してください。
- “leaderstats”のように、 FindFirstChild()のパラメータは文字列で指定していることを確認してください。
- FindFirstChild の各文字列が、PlayerSetup スクリプトの IntValue の名前と正確に同じであることを確認します。例えば、コードで Rubys をお金として使用する場合は、FindFirstChild(“Rubies”)になります。
- giveUpgrade() が clickDetector.MouseClick の上にあることを確認してください。
完成したBuyScript
スクリプトの完成版は、以下の通りです。
-- ボタンをクリックすると、バッグが増量するアップグレードを購入することができる
local buyButton = script.Parent
local clickDetector = buyButton.ClickDetector
-- アップグレード用変数
local newSpaces = 10
local upgradeCost = 100
local function giveUpgrade(player)
print("Someone clicked the button")
-- プレイヤーのリーダーボードの取得
local playerStats = player:FindFirstChild("leaderstats")
-- リーダーボード内の Gold と Spaces オブジェクトの取得
local playerGold = playerStats:FindFirstChild("Gold")
local playerSpaces = playerStats:FindFirstChild("Spaces")
-- アップグレードのための資金が十分にあるかどうかをチェックする
if playerGold.Value >= upgradeCost then
print("Player can buy item")
-- プレイヤーのお金からアップグレード料を引く
playerGold.Value = playerGold.Value - upgradeCost
playerSpaces.Value = playerSpaces.Value + newSpaces
end
end
clickDetector.MouseClick:Connect(giveUpgrade)
[ 4.アイテムの売却 ]
[ 6.プロジェクトの終了 ]