アイテムを売る

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

ゲームループの次の段階では、プレイヤーはゴールドでアイテムを販売して、バックパックにより多くのスペースを購入することができます。

販売プラットフォームを作成する

プレイヤーは、バッグ内の各アイテムに対してゴールドを与えるプラットフォームに踏み込んで、アイテムを販売します。

プラットフォームを設定する

プラットフォームはどの部分でもあり、販売を処理するスクリプトを含みます。

  1. 新しいパーツ「SellPlatform」を作成し、エクスペリエンスのテーマに合わせてカスタマイズします。

  2. SellPlatform では、SellScript という新しいスクリプトを作成し、コメンコメントするを追加します。

  3. SellScript では、local sellPart = script.Parent を入力して SellPlatform パーツを取得します。


    -- プレイヤーのアイテムをすべて販売し、ゴールドを与える
    local sellPart = script.Parent

タッチイベントを処理する

プラットフォームを使用するには、スクリプトにプレイヤーが触れたかどうかをチェックする機能が必要です。

  1. プレイヤーがプラットフォームに触れているかどうかをチェックする機能 onTouch() を作成


    local function onTouch(partTouched)
    local character = partTouched.Parent
    end
  2. リーダーボードの統計を変更するには、スクリプトはどのプレイヤーがキャラクターを制御しているかを知る必要があります。if 文では、GetPlayerFromCharacter() 関数を使用してプレイヤーを見つけます。


    local Players = game:GetService("Players")
    local player = Players:GetPlayerFromCharacter(character)
  3. 次の行で、そのプレイヤーのリーダーステータスコンテナを取得します。


    local Players = game:GetService("Players")
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- プレイヤーのリーダーボードを取得します。アイテムとお金を取得するために必要
    local playerStats = player:FindFirstChild("leaderstats")
    end
  4. 次の行で、プレイヤーの資金とアイテムを取得する変数を作成します。


    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")
    end
    end
  5. 作業をチェックするには、プレイヤーが sellPart をタッチした場合に実行される印刷文を追加します。


    local playerItems = playerStats:FindFirstChild("Items")
    local playerGold = playerStats:FindFirstChild("Gold")
    print("A player touched sellPart")
  6. スクリプトの最下部で、onTouch() を接続して、sellPart のタッチイベントを販売します。


    local Players = game:GetService("Players")
    local function onTouch(partTouched)
    local character = partTouched.Parent
    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")
    print("A player touched sellPart")
    end
    end
    end
    sellPart.Touched:Connect(onTouch)
  7. プロジェクトを再生し、sellPart に踏み込んでください;出力ウィンドウにメッセージ "A Player touched sellPart" が表示されるはずです。

アイテムを売る

このエクスペリエンスでは、プレイヤーは各アイテムにつき 100 ゴールドを受け取ります。資金を入手した後、アイテムは 0 に戻され、プレイヤーが世界を探索してより多くのアイテムを見つけることができます。

新しい売却機能をコードする

  1. 変数の下で、名前が sellItems()playerItems および playerGold の 2つのパラメータを持つ関数を作成します。


    -- プレイヤーのアイテムをすべて販売し、ゴールドを与える
    local sellPart = script.Parent
    local function sellItems(playerItems, playerGold)
    end
    local function onTouch(partTouched)
  2. プレイヤーに適切な量のゴールドを与えるには、playerItems の値を取り、それをアイテムごとに受け取るべきゴールド量で掛けます。この例では、アイテムごとに 100 ゴールドピースを与えます。

    sellItems() 機能で、local totalSell = playerItems.Value * 100 を入力します


    local function sellItems(playerItems, playerGold)
    -- プレイヤーが持っているアイテムの数を取得し、それをアイテム価値で掛け算します。
    local totalSell = playerItems.Value * 100
    end
  3. タイプ playerGold.Value += totalSell を追加して、アイテムの現在のゴールドにゴールドを追加します。


    local function sellItems(playerItems, playerGold)
    local totalSell = playerItems.Value * 100
    -- プレイヤーがどのくらいお金を稼いでいるかを追加
    playerGold.Value += totalSell
    end
  4. タイプ playerItems.Value = 0 。これにより、プレイヤーのアイテムが 0 に戻されます。プレイヤーのアイテムが 0 に戻されない場合、スクリプトは停止せずにプレイヤーにゴールドを与え続けます。


    local function sellItems(playerItems, playerGold)
    local totalSell = playerItems.Value * 100
    playerGold.Value += totalSell
    playerItems.Value = 0
    end
  5. onTouch() 関数では、 第二の 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 then
    sellItems(playerItems, playerGold)
    end
    end
    end
  6. プロジェクトをプレイして、プレイヤーがプラットフォームに踏み込むたびに、ゴールドが増加し、アイテムが 0 に設定されるかどうかをチェックします。

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

この時点で、アイテムの販売は意図した通りに機能しません。以下のいずれかを試してください。

  • sellItems() は、プレイヤーのアイテムをチェックする の文が呼び出されます。
  • プレイヤーアイテムのような任意の IntValue は、変更を加えた場合、最後に .Value を使用します。値は常に大文字です。
  • sellPart.Touched:Connect(onTouch) は、スクリプトの 下部 にタイプされます。
  • sellItems(playerItems, playerGold) は、if humanoid の文が終わる前にタイプされます。