リーダーボードが作成されたとき、プレイヤーは何かを集める必要があります。そのためには、世界で見つけるための 3D アイテムを作成する必要があります。以下は、プレイヤーがアイテムを収穫するプロセスのビデオです。
アイテムを構築する
エクスペリエンス内のアイテムは、プレイヤーがツールを使用して収穫する 3D モデルです。各アイテムは、収穫された後、期限付きの時間後に再び表示されます。
アイテムについては、ゲームデザインドキューブを参照してください。このシリーズでは、クリスタルを例として使用しています。
パーツまたはマーケットプレイスで見つけたオブジェクトを使用してオブジェクトを作成します。
必要に応じて、この リンク でクリスタルパーツをダウンロードします。追加するには、ワークスペースを右クリックし、 ファイルから挿入 を選択します。
自分のパーツを使用する場合は、モデル にすべてのパーツをグループ化することです。これをする方法の 1 つは、すべてのアイテムを選択し、パーツを右クリックし、グループ を選択することです。これはパーツを整理するモデルを作成します。
すべてのパーツが アンカード であることを確認してください。
だから、アイテムは消えると収穫できない、 CanHarvest という名状況の BoolValue を作成して、そのステータスを追跡できます。
In Properties for CanHarvest, check the 価値の値をチェックしてください。 チェック値のボックスをチェックすると、プレイヤーがアイテムを収穫できるようになります。
ツールの作成
プレイヤーには、斧またはシャベルのようなアイテムが必要です。Roblox では、プレイヤーが装備して使用できるアイテムは、 ツール と呼ばれます。このレッスンでは、部品がすべて含まれているスターターツールを使用して、後でカスタマイズできるようにします。
ツールの追加
プレイヤーがスターターツールを使用するには、StarterPack にダウンロードして配置する必要があります。
In Explorer, under Workspace, right-click on StarterPack. そして、Select ファイルから挿入 を選択します。
ダウンロードしたファイルを選択します、 starterTool.rbxm 。
プロジェクトをプレイテストします。プレイヤーはスタート時にツールを装備する必要があります。ゲーム内で、1 を押してツールを装備または外す。左クリックしてツールをスイングします。
ツールのコーディング
ツールが収穫可能なオブジェクトにヒットし、プレイヤーのバッグに十分なスペースがある場合、プレイヤーのアイテム数は、リーダーボースコアボード上で 1 をカウントします。アイテムを収穫すると、数秒間アイテムが消えてから、数秒間アイテムを再生するたびに 1 をカウントします。これは、プレイヤーが同じ
スクリプトのセットアップ
この時点で、ツールにスクリプトを追加します。このスクリプトは、ツールが収穫可能なオブジェクトに触れると何が起こるかを処理します。
StarterPack の [スターターツール] の下で、新しいスクリプトを追加します。
スクリプトで、上部に説明コメントを記述し、次にツールパーツとツール自体を保存する変数を作成します。
-- 収穫可能な部分にタッチすると、プレイヤーにアイテムを与えますlocal tool = script.Parentlocal toolPart = tool.Handle
アイテムをチェック中
ツールがオブジェクトにタッチすると、そのオブジェクトに CanHarvest が含まれているかどうかをチェックし、Boolean を 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)Under local playerStats 、アイテムとスペースステータスを保存する変数を作成します。
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
収穫可能なオブジェクトをチェック
ツールスクリプトにプレイヤーのアイテムとプレイヤーのスペースが作成されたので、プレイヤーにアイテムを提供できます。ツールに触れるプレイヤーのオブジェクトをチェックするために作成された関数を使用して、プレイヤーにアイテムを提供できます。
スクリプトには、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 を偽に設定
アイテムは、短い時間後に通常に戻ります。この方法では、プレイヤーはそれぞれの収穫について1つのアイテムしか得られず、オリジナルがリセットされる間に周りを探す必要があります。
アイテムが追加される場所の下で、canHarvest を偽に設定します。プレイヤーがアイテムを収穫すると、スクリプトは、canHarvest の値を変更しません。
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendend値を偽に設定した後、部品の透明度を 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 個のアイテムを収穫するために 1 個のアイテムを獲得します。
- アイテムは消えてから、5秒後に再度表示されます。
トラブルシューティングのヒント
この時点で、チェックの 1 つがパスしなかった場合は、次の 1 つを試してください。
- Transparency と CanCollide が正確にスペルされているかどうかを確認してください。
- 必ず canHarvest.Value を使用し、可Harvest = は 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)