アイテムを集める

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

リーダーボードが作成されたので、プレイヤーは集めるものが必要です。そのためには、世界でプレイヤーが見つける 3D アイテムを作成する必要があります。以下は、プレイヤーがアイテムを収穫するプロセスのビデオです。

アイテムを作成する

エクスペリエンスのアイテムは、プレイヤーがツールを使用して収穫する 3D モデルです。収穫された各アイテムは、一度消えてから、制限された時間後に再出現します。

アイテムに関しては、ゲームデザインドキュメントに戻ります。このシリーズでは、クリスタルを例として使用しています。

  1. パーツまたはマーケットプレイスで信頼できるユーザーが見つけたオブジェクトを使用してオブジェクトを作成します。

    必要に応じて、この リンク でクリスタルパーツをダウンロードします。追加するには、ワークスペースを右クリックして ファイルから挿入 を選択します。

  2. 自分のパーツを使用している場合、すべてのパーツを モデル にグループ化します。これを行う方法の 1つは、すべてのアイテムを選択し、パーツを右クリックして グループ を選択することです。これにより、パーツを整理するモデルが作成されます。

  3. パーツがすべて アンカーされていることを確認してください

  4. そのため、アイテムは消えている間に収穫できません、そのステータスを追跡するために BoolValue という状況前の CanHarvest を作成します。

  5. CanHarvest のプロパティで、 ボックスをチェックします。値ボックスをチェックすると、ボールプレイヤーがアイテムを収穫できるようになります。

ツールを作成する

プレイヤーは、斧やシャベルのようなものが必要で、アイテムを集めることができます。Roblox では、プレイヤーが装備して使用できるアイテムは ツール と呼ばれます。このレッスンでは、すべてのパーツと既に作成されたアニメーションを持つスターターツールを使用し、後でカスタマイズできます。

ツールを追加

プレイヤーがスターターツールを使用するには、ダウンロードしてスターターパックに置きます。

  1. 以下のスターターツールをダウンロードします。

  2. エクスプローラで [ワークスペース] の下で、StarterPack を右クリックします。次に、 ファイルから挿入 を選択します。

  3. ダウンロードしたファイルを選択します、starterTool.rbxm

  4. プロジェクトをプレイテストします。プレイヤーは、開始めるとすぐにツールを装備すべきです。ゲーム内で、1 を押してツールを装備または片付けます。左クリックして振り回す。

ツールをコード化

ツールが収穫可能なオブジェクトにヒットし、プレイヤーがバッグに十分なスペースを持っている場合、リーダーボースコアボード上のプレイヤーのアイテム数が 1 増加します。アイテムを収穫すると数秒間消え、再出現する前に数秒間収穫できなくなります。これは、プレイヤーが同じアイテムをクリックするのではなく、より多くのアイテムを見つけるために探検するように促します。

スクリプトを設定する

この時点で、ツールにスクリプトを追加します。このスクリプトは、ツールが収穫可能なオブジェクトに触れたときに発生することを処理します。

  1. スターターパックで、スターターツールの下に、ツールスクリプトという新しいスクリプトを追加します。

  2. スクリプトでは、上部に説明コメントを書き、ツールパーツとツール自体を保存する変数を作成します。


    -- 収穫可能なパーツに触れたときにプレイヤーにアイテムを与える
    local tool = script.Parent
    local toolPart = tool.Handle

アイテムをチェック

ツールがオブジェクトに触れるたびに、そのオブジェクトに CanHarvest が内蔵されているか、そしてブールが True に設定されているかをチェックします。

  1. パラメータ onTouch() という名前の新しい関数を作成し、パラメータ partTouched という名前の新しい関数を作成します。


    local tool = script.Parent
    local toolPart = tool.Handle
    local function onTouch(partTouched)
    end
  2. その機能では、canHarvest という名前のローカル変数を作成します。次に、FindFirstChild() 関数を使用して、そのパーツの親に CanHarvest ブールが存在するかどうかを確認します。


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    end
  3. 今、スクリプトは実際に何かが見つかっているかどうかをチェックし、そうであればコードを実行する必要があります。これを行うには、条件が canHarvest である if 文を作成します。canHarvest に何かが存在する場合、この文は真に評価されます。


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    end
    end
  4. if 文では、スクリプトが動作しているかどうかを確認するために印字文を追加します。動作が確実になった後、アイテムの収集ロジックをコード化できます。


    if canHarvest then
    -- コードが機能するかどうかをテストするために使用
    print("Found an item")
    end
  5. 機能の end 文で、toolPart.Touched:Connect(onTouch) を追加します。これにより、スクリプトはツール (またはこの場合、そのハンドル) に何かが触れているかどうかをチェックし、そうであれば onTouch() を呼び出します。


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    print("Found an item")
    end
    end
    toolPart.Touched:Connect(onTouch)
  6. プロジェクトを再生し、収穫可能なアイテムにツールを使用します (左クリックで振動)。出力ウィンドウに「アイテムを見つけました」メッセージが表示されることを確認します。

トラブルシュートのヒント

メッセージが表示されない場合は、次のヒントを試してください。

  • カスタムパーツとメッシュを使用している場合、エラーが発生する可能性があります。スクリプトは、ツールがタッチしているパーツの子である CanHarvest オブジェクトがある場合にのみ機能します。
  • ツールがスターターパックにあることを確認してください、ワークスペースにはありません。
  • 部品が固定されているかどうかをチェックします。

プレイヤーの統計を取得

プレイヤーのアイテムを増やす前に、ツールはプレイヤーがリーダーボードに持っているアイテムの数を見つける必要があります。ツールがリーダーボードにアクセスできるようになると、そのプレイヤーのアイテム数を変更できます。

  1. まず、ツールを使用してプレイヤーを取得します。ツールスクリプトの local item = toolitem の下、およびカスタム関数の上に、タイプしま入力:


    local item = toolitem
    local backpack = tool.Parent
    local player = backpack.Parent
    local function onTouch(partTouched)
  2. 次の行で、FindFirstChild() 関数を使用してプレイヤーのリーダーステータスを見つけます。


    local backpack = tool.Parent
    local player = backpack.Parent
    local playerStats = player:FindFirstChild("leaderstats")
    local function onTouch(partTouched)
  3. local playerStats の下で、アイテムとスペースの統計を保存する変数を作成します。


    local playerStats = player:FindFirstChild("leaderstats")
    local playerItems = playerStats:FindFirstChild("Items")
    local playerSpaces = playerStats:FindFirstChild("Spaces")

収穫可能なオブジェクトをチェックする

ツールスクリプトにプレイヤーアイテムとプレイヤースペース変数が作成されたので、プレイヤーにアイテムを与え始めることができます。作成された関数を使用して、ツールに触れているオブジェクトが収穫できるかどうか、およびプレイヤーがバッグに十分なスペースを持っているかどうかをチェックして、リーダーボードに表示されるアイテムを 1 個増やすことができます。

  1. スクリプトには、満たされる 2つの条件を持つ if 文が必要です。if 文を作成して開始し、次の条件を追加し、and キーワードで結合します。

    • canHarvest.Value == true
    • playerItems.Value < playerSpaces.Value

    local function onTouch(partTouched)
    local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")
    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    end
    end
    end
  2. if 文自体では、playerItems.Value += 1 をタイプしてプレイヤーのアイテムに追加します。


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    end
    end
  3. プロジェクトを再生し、ツールを使用してアイテムを収穫し、アイテム数が増加したかどうかをチェックします。

アイテムをリセット

アイテムが収穫されると、2つの方法でリセットされます:

  • アイテムは消え、インタラクトできなくなります
  • CanHarvest を false に設定

アイテムはしばらく経過すると通常に戻ります。この方法では、プレイヤーは各収穫のたびに 1 個のアイテムしか得られず、オリジナルがリセットされている間にもっと見つける必要があります。

  1. アイテムが追加される場所の下で、canHarvest を偽に設定します。プレイヤーがアイテムを収穫するとすぐに canHarvest の値を偽にすることにより、スクリプトはツールヒットごとに1つ以上のアイテムを提供しなくなります。


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    end
    end
  2. 値を false に設定した後、パーツの透明度を 1 (見えない) に設定し、[CanCollide] を false に設定して、プレイヤーがタッチできないようにします。


    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    end
  3. タイプ task.wait(5) を入再設定して、アイテムをリセットするための時間を与えます。5は推奨される数字であり、あなたのエクスペリエンスの長さによって異なるかもしれません。


    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    task.wait(5)
    end
  4. 待機期間の後、CanHarvest を true に設定し、Transparency と CanCollide を元の値にリセットして、以前のコードの反対を行います。


    task.wait(5)
    canHarvest.Value = true
    partTouched.Transparency = 0
    partTouched.CanCollide = true
    end
  5. プロジェクトを再生してチェック:

    • プレイヤーはアイテムを収穫するために 1 アイテムしか得られません。
    • アイテムは消えてから 5 秒後に再出現します。

トラブルシュートのヒント

この時点で、チェックの 1つがパスしなかった場合は、以下のいずれかを試してください。

  • 透明性と CanCollide が正確にスペルされ、大文字で表記されていることを確認します。
  • canHarvest.Value を使用し、canHarvest = true ではないことを確認してください。

完全なツールスクリプト

スクリプトの完了したバージョンは以下で参照できます。


local toolPart = script.Parent
local tool = toolPart.Parent
local backpack = tool.Parent
local player = backpack.Parent
local playerStats = player:FindFirstChild("leaderstats")
local playerItems = playerStats:FindFirstChild("Items")
local playerSpaces = playerStats:FindFirstChild("Spaces")
local function onTouch(partTouched)
local canHarvest = partTouched:FindFirstChild("CanHarvest")
if canHarvest then
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
playerItems.Value += 1
canHarvest.Value = false
-- パーツに触れたをリセット、収集されたアイテム
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- 収集されたアイテムを再出現させ、再び使用可能にする
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)