リーダーボードが作成されたので、プレイヤーは集めるものが必要です。そのためには、世界でプレイヤーが見つける 3D アイテムを作成する必要があります。以下は、プレイヤーがアイテムを収穫するプロセスのビデオです。
アイテムを作成する
エクスペリエンスのアイテムは、プレイヤーがツールを使用して収穫する 3D モデルです。収穫された各アイテムは、一度消えてから、制限された時間後に再出現します。
アイテムに関しては、ゲームデザインドキュメントに戻ります。このシリーズでは、クリスタルを例として使用しています。
パーツまたはマーケットプレイスで信頼できるユーザーが見つけたオブジェクトを使用してオブジェクトを作成します。
必要に応じて、この リンク でクリスタルパーツをダウンロードします。追加するには、ワークスペースを右クリックして ファイルから挿入 を選択します。
自分のパーツを使用している場合、すべてのパーツを モデル にグループ化します。これを行う方法の 1つは、すべてのアイテムを選択し、パーツを右クリックして グループ を選択することです。これにより、パーツを整理するモデルが作成されます。
パーツがすべて アンカーされていることを確認してください 。
そのため、アイテムは消えている間に収穫できません、そのステータスを追跡するために BoolValue という状況前の CanHarvest を作成します。
CanHarvest のプロパティで、 値 ボックスをチェックします。値ボックスをチェックすると、ボールプレイヤーがアイテムを収穫できるようになります。
ツールを作成する
プレイヤーは、斧やシャベルのようなものが必要で、アイテムを集めることができます。Roblox では、プレイヤーが装備して使用できるアイテムは ツール と呼ばれます。このレッスンでは、すべてのパーツと既に作成されたアニメーションを持つスターターツールを使用し、後でカスタマイズできます。

ツールを追加
プレイヤーがスターターツールを使用するには、ダウンロードしてスターターパックに置きます。
エクスプローラで [ワークスペース] の下で、StarterPack を右クリックします。次に、 ファイルから挿入 を選択します。
ダウンロードしたファイルを選択します、starterTool.rbxm。
プロジェクトをプレイテストします。プレイヤーは、開始めるとすぐにツールを装備すべきです。ゲーム内で、1 を押してツールを装備または片付けます。左クリックして振り回す。
ツールをコード化
ツールが収穫可能なオブジェクトにヒットし、プレイヤーがバッグに十分なスペースを持っている場合、リーダーボースコアボード上のプレイヤーのアイテム数が 1 増加します。アイテムを収穫すると数秒間消え、再出現する前に数秒間収穫できなくなります。これは、プレイヤーが同じアイテムをクリックするのではなく、より多くのアイテムを見つけるために探検するように促します。
スクリプトを設定する
この時点で、ツールにスクリプトを追加します。このスクリプトは、ツールが収穫可能なオブジェクトに触れたときに発生することを処理します。
スターターパックで、スターターツールの下に、ツールスクリプトという新しいスクリプトを追加します。
スクリプトでは、上部に説明コメントを書き、ツールパーツとツール自体を保存する変数を作成します。
-- 収穫可能なパーツに触れたときにプレイヤーにアイテムを与えるlocal tool = script.Parentlocal toolPart = tool.Handle
アイテムをチェック
ツールがオブジェクトに触れるたびに、そのオブジェクトに CanHarvest が内蔵されているか、そしてブールが True に設定されているかをチェックします。
パラメータ onTouch() という名前の新しい関数を作成し、パラメータ partTouched という名前の新しい関数を作成します。
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)endその機能では、canHarvest という名前のローカル変数を作成します。次に、FindFirstChild() 関数を使用して、そのパーツの親に CanHarvest ブールが存在するかどうかを確認します。
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")end今、スクリプトは実際に何かが見つかっているかどうかをチェックし、そうであればコードを実行する必要があります。これを行うには、条件が canHarvest である if 文を作成します。canHarvest に何かが存在する場合、この文は真に評価されます。
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendif 文では、スクリプトが動作しているかどうかを確認するために印字文を追加します。動作が確実になった後、アイテムの収集ロジックをコード化できます。
if canHarvest then-- コードが機能するかどうかをテストするために使用print("Found an item")end機能の end 文で、toolPart.Touched:Connect(onTouch) を追加します。これにより、スクリプトはツール (またはこの場合、そのハンドル) に何かが触れているかどうかをチェックし、そうであれば onTouch() を呼び出します。
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)プロジェクトを再生し、収穫可能なアイテムにツールを使用します (左クリックで振動)。出力ウィンドウに「アイテムを見つけました」メッセージが表示されることを確認します。
トラブルシュートのヒント
メッセージが表示されない場合は、次のヒントを試してください。
- カスタムパーツとメッシュを使用している場合、エラーが発生する可能性があります。スクリプトは、ツールがタッチしているパーツの子である CanHarvest オブジェクトがある場合にのみ機能します。
- ツールがスターターパックにあることを確認してください、ワークスペースにはありません。
- 部品が固定されているかどうかをチェックします。
プレイヤーの統計を取得
プレイヤーのアイテムを増やす前に、ツールはプレイヤーがリーダーボードに持っているアイテムの数を見つける必要があります。ツールがリーダーボードにアクセスできるようになると、そのプレイヤーのアイテム数を変更できます。
まず、ツールを使用してプレイヤーを取得します。ツールスクリプトの local item = toolitem の下、およびカスタム関数の上に、タイプしま入力:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)次の行で、FindFirstChild() 関数を使用してプレイヤーのリーダーステータスを見つけます。
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)local playerStats の下で、アイテムとスペースの統計を保存する変数を作成します。
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
収穫可能なオブジェクトをチェックする
ツールスクリプトにプレイヤーアイテムとプレイヤースペース変数が作成されたので、プレイヤーにアイテムを与え始めることができます。作成された関数を使用して、ツールに触れているオブジェクトが収穫できるかどうか、およびプレイヤーがバッグに十分なスペースを持っているかどうかをチェックして、リーダーボードに表示されるアイテムを 1 個増やすことができます。
スクリプトには、満たされる 2つの条件を持つ if 文が必要です。if 文を作成して開始し、次の条件を追加し、and キーワードで結合します。
- canHarvest.Value == true
- playerItems.Value < playerSpaces.Value
local function onTouch(partTouched)local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenendendendif 文自体では、playerItems.Value += 1 をタイプしてプレイヤーのアイテムに追加します。
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endendプロジェクトを再生し、ツールを使用してアイテムを収穫し、アイテム数が増加したかどうかをチェックします。
アイテムをリセット
アイテムが収穫されると、2つの方法でリセットされます:
- アイテムは消え、インタラクトできなくなります
- CanHarvest を false に設定
アイテムはしばらく経過すると通常に戻ります。この方法では、プレイヤーは各収穫のたびに 1 個のアイテムしか得られず、オリジナルがリセットされている間にもっと見つける必要があります。
アイテムが追加される場所の下で、canHarvest を偽に設定します。プレイヤーがアイテムを収穫するとすぐに canHarvest の値を偽にすることにより、スクリプトはツールヒットごとに1つ以上のアイテムを提供しなくなります。
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendend値を false に設定した後、パーツの透明度を 1 (見えない) に設定し、[CanCollide] を false に設定して、プレイヤーがタッチできないようにします。
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseendタイプ task.wait(5) を入再設定して、アイテムをリセットするための時間を与えます。5は推奨される数字であり、あなたのエクスペリエンスの長さによって異なるかもしれません。
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)end待機期間の後、CanHarvest を true に設定し、Transparency と CanCollide を元の値にリセットして、以前のコードの反対を行います。
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueendプロジェクトを再生してチェック:
- プレイヤーはアイテムを収穫するために 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)