
ゲームループの次の段階では、プレイヤーはゴールドでアイテムを販売して、バックパックにより多くのスペースを購入することができます。
販売プラットフォームを作成する
プレイヤーは、バッグ内の各アイテムに対してゴールドを与えるプラットフォームに踏み込んで、アイテムを販売します。
プラットフォームを設定する
プラットフォームはどの部分でもあり、販売を処理するスクリプトを含みます。
新しいパーツ「SellPlatform」を作成し、エクスペリエンスのテーマに合わせてカスタマイズします。
SellPlatform では、SellScript という新しいスクリプトを作成し、コメンコメントするを追加します。
SellScript では、local sellPart = script.Parent を入力して SellPlatform パーツを取得します。
-- プレイヤーのアイテムをすべて販売し、ゴールドを与えるlocal sellPart = script.Parent
タッチイベントを処理する
プラットフォームを使用するには、スクリプトにプレイヤーが触れたかどうかをチェックする機能が必要です。
プレイヤーがプラットフォームに触れているかどうかをチェックする機能 onTouch() を作成
local function onTouch(partTouched)local character = partTouched.Parentendリーダーボードの統計を変更するには、スクリプトはどのプレイヤーがキャラクターを制御しているかを知る必要があります。if 文では、GetPlayerFromCharacter() 関数を使用してプレイヤーを見つけます。
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)次の行で、そのプレイヤーのリーダーステータスコンテナを取得します。
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- プレイヤーのリーダーボードを取得します。アイテムとお金を取得するために必要local playerStats = player:FindFirstChild("leaderstats")end次の行で、プレイヤーの資金とアイテムを取得する変数を作成します。
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- プレイヤーのリーダーボードを取得します。アイテムとお金を取得するために必要local playerStats = player:FindFirstChild("leaderstats")if playerStats then-- プレイヤーのアイテムとお金を取得するlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")endend作業をチェックするには、プレイヤーが sellPart をタッチした場合に実行される印刷文を追加します。
local playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")スクリプトの最下部で、onTouch() を接続して、sellPart のタッチイベントを販売します。
local Players = game:GetService("Players")local function onTouch(partTouched)local character = partTouched.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- プレイヤーのリーダーボードを取得します。アイテムとお金を取得するために必要local playerStats = player:FindFirstChild("leaderstats")if playerStats then-- プレイヤーのアイテムとお金を取得するlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")endendendsellPart.Touched:Connect(onTouch)プロジェクトを再生し、sellPart に踏み込んでください;出力ウィンドウにメッセージ "A Player touched sellPart" が表示されるはずです。
アイテムを売る
このエクスペリエンスでは、プレイヤーは各アイテムにつき 100 ゴールドを受け取ります。資金を入手した後、アイテムは 0 に戻され、プレイヤーが世界を探索してより多くのアイテムを見つけることができます。
新しい売却機能をコードする
変数の下で、名前が sellItems() と playerItems および playerGold の 2つのパラメータを持つ関数を作成します。
-- プレイヤーのアイテムをすべて販売し、ゴールドを与えるlocal sellPart = script.Parentlocal function sellItems(playerItems, playerGold)endlocal function onTouch(partTouched)プレイヤーに適切な量のゴールドを与えるには、playerItems の値を取り、それをアイテムごとに受け取るべきゴールド量で掛けます。この例では、アイテムごとに 100 ゴールドピースを与えます。
sellItems() 機能で、local totalSell = playerItems.Value * 100 を入力します
local function sellItems(playerItems, playerGold)-- プレイヤーが持っているアイテムの数を取得し、それをアイテム価値で掛け算します。local totalSell = playerItems.Value * 100endタイプ playerGold.Value += totalSell を追加して、アイテムの現在のゴールドにゴールドを追加します。
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100-- プレイヤーがどのくらいお金を稼いでいるかを追加playerGold.Value += totalSellendタイプ playerItems.Value = 0 。これにより、プレイヤーのアイテムが 0 に戻されます。プレイヤーのアイテムが 0 に戻されない場合、スクリプトは停止せずにプレイヤーにゴールドを与え続けます。
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100playerGold.Value += totalSellplayerItems.Value = 0endonTouch() 関数では、 第二の if 文の下で 、sellItems() 関数を呼び出します。パラメーターをパスし、playerItems および playerGold を変更できるようにします。
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- プレイヤーのリーダーボードを取得します。アイテムとお金を取得するために必要local playerStats = player:FindFirstChild("leaderstats")if playerStats then-- プレイヤーのアイテムとお金を取得するlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")if playerItems and playerGold thensellItems(playerItems, playerGold)endendendプロジェクトをプレイして、プレイヤーがプラットフォームに踏み込むたびに、ゴールドが増加し、アイテムが 0 に設定されるかどうかをチェックします。
トラブルシューティングヒント
この時点で、アイテムの販売は意図した通りに機能しません。以下のいずれかを試してください。
- sellItems() は、プレイヤーのアイテムをチェックする 秒 の文が呼び出されます。
- プレイヤーアイテムのような任意の IntValue は、変更を加えた場合、最後に .Value を使用します。値は常に大文字です。
- sellPart.Touched:Connect(onTouch) は、スクリプトの 下部 にタイプされます。
- sellItems(playerItems, playerGold) は、if humanoid の文が終わる前にタイプされます。