スカベンジャーハント

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

ScavengerHunt 開発者モジュール は、プレイヤーに体験を探索するための本質的にゲーム化された方法を提供し、自然に彼らを全体の場所へと紹介します。プレイヤーの進行状況は永続的であるため、スカベンジャーハントはセッションにわたって続けることができます。

モジュールの使用方法

インストール

ScavengerHuntモジュールを体験で使用するには:

  1. スタジオのウィンドウメニューまたはホームタブツールバーから、ツールボックスを開き、クリエイターストアタブを選択します。

  2. モデルのソートが選択されていることを確認し、カテゴリーすべて表示ボタンをクリックします。

  3. パッケージタイルを見つけてクリックします。

  4. スカベンジャーハントモジュールを見つけてクリックするか、3Dビューにドラッグアンドドロップします。

  5. エクスプローラーウィンドウで、ScavengerHuntモデル全体をReplicatedStorageに移動させます。体験を実行すると、モジュールが動作を開始します。

トークンの使用

スカベンジャーハントモジュールは、プレイヤーが検索して収集するアイテムとしてトークンを使用します。このモジュールには、3Dワールドに配置できる1つのトークンモデルが付属しています。

  1. モジュールのメインフォルダ内のWorkspaceフォルダにあるToken1メッシュを見つけます。

  2. Token1を最上層のWorkspace階層に移動させ、希望する位置に配置します。

  3. トークンにユニークな名前を付けます。この名前は、モジュールが各プレイヤーが収集したトークンを追跡するために使用されます。

  4. さらにトークンを追加するには、既存のトークンを複製し、ユニークな名前を付けます。

バンドルされたメッシュトークンを使用したくない場合、ModelまたはBasePartの任意のオブジェクトが機能しますが、以下の条件を満たす必要があります:

  • オブジェクトにはCollectionServiceタグとしてScavengerHuntPartが必要です。必要に応じて、モジュールが使用するCollectionServiceタグ名は、configureServer呼び出しでtokenTagに別の値を設定することによって変更できます。

  • オブジェクトには、トークンが収集されたときに表示される「フレーバーテキスト」を設定した子のStringValueインスタンスが含まれている必要があります。

    モデル
    MeshPart

リージョンの使用

リージョンはトークンと少し異なり、プレイヤーがそれらに入ると「収集済み」としてマークされた大きなエリアです。さらに、プレイヤーがリージョンを離れると、フレーバーテキストのモーダルが自動的に消去され、そのリージョン自体がワークスペースから削除されます。

  1. リージョンの周りにブロックや球体などの固定されたパーツを作成します。モジュールは、プレイヤーがリージョンと物理的に衝突しないように、ランタイムでCanCollideプロパティを自動的に無効にします。

  2. 固有の名前を付けます。この名前は、モジュールが各プレイヤーがエントリーしたリージョンを追跡するために使用します。

  3. パーツのプロパティのタグセクションを使用して、ScavengerHuntPartタグをパーツに適用し、CollectionServiceが検出できるようにします。必要に応じて、モジュールが使用するタグ名は、configureServer呼び出しでtokenTagに別の値を設定することによって変更できます。

  4. リージョンに入った際に表示される「フレーバーテキスト」を設定した子のStringValueインスタンスを含めます。

設定

モジュールはほとんどのユースケースで動作するようにあらかじめ設定されていますが、簡単にカスタマイズできます。たとえば、トークンの回転速度を変更し、モーダル情報メッセージをカスタマイズするには:

  1. StarterPlayerScriptsに新しいLocalScriptを作成し、名前をConfigureScavengerHuntに変更します。

  2. 新しいスクリプトに以下のコードを貼り付けます。

    LocalScript - ConfigureScavengerHunt

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
    ScavengerHunt.configureClient({
    infoModalText = "私のスカベンジャーハントへようこそ!",
    completeModalText = "私のスカベンジャーハントを楽しんでいただきありがとうございます!",
    tokenRotationSpeed = 60,
    })

収集イベント

プレイヤーがトークンを集めたりリージョンに入ったりするたびに、collectedイベントが発生します。このイベントは、サーバー側のScriptでリッスンでき、適切に応答します。接続された関数は、トークンに衝突したプレイヤーまたはリージョンに入ったプレイヤーのPlayerと、そのトークンまたはリージョンの名前を受け取ります。

同様に、プレイヤーがすべてのトークンを収集したり、すべてのタグ付きリージョンに入ると、allCollectedイベントが発生し、接続された関数は関連するPlayerを受け取ります。この関数はプレイヤーごとに一度だけ発生し、そのプレイヤーにバッジを付与したり、新しいエリアにアクセスさせたり、体験内通貨を与えたりするために使用できます。

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. "がハントを完了しました!")
end)

カスタムGUI

このモジュールは、デフォルトのGUIをカスタマイズするためのいくつかのオプションを公開していますが、カスタムGUI要素を表示することもできます。

useCustomModalstrueに設定されている場合、configureClient関数で、プレイヤーがトークントラッカーをアクティブにすると、showInfoModalイベントが発火します。同様に、プレイヤーがスカベンジャーハントですべてを収集したときにshowCompleteModalイベントが発火します。これらのイベントは、LocalScriptでリッスンできます。

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- カスタム情報モーダルを表示
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- カスタム完了モーダルを表示
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)

GUIの可視性

デフォルトでは、スカベンジャーハントは情報モーダルまたは完了モーダルが表示されると、すべてのScreenGuisCoreGuis(プレイヤーリストを除く)を隠します。この自動隠蔽動作を上書きして、どのGUIが可視であるべきかをプログラム的に決定したい場合は、hideOtherGuisおよびshowOtherGuisコールバックを含め、独自のカスタムロジックで応答します。

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- 隠れないスクリーンGUIを作成
local specialGuiInstance = Instance.new("ScreenGui")
-- スカベンジャーハントGUIの上にスクリーンGUIを描画
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- GUIにテキストラベルを追加
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "モーダルを表示しているときも表示されます"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- 開発者が定義したすべてのスクリーンGUIを隠す
local instances = playerGui:GetChildren()
for _, instance in instances do
if instance:IsA("ScreenGui") and not instance.Name == "ScavengerHunt" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- 特定のコアGUIを隠す
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- 隠されたすべての開発者定義のスクリーンGUIを表示
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- 隠された特定のコアGUIを表示
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

APIリファレンス

関数

configureClient

configureClient(config: table)

configテーブル内の以下のキー/値を介して、デフォルトのクライアントサイド設定オプションをオーバーライドします。この関数は、LocalScriptからのみ呼び出すことができます。

キー説明デフォルト
autoDismissTimeモーダルが自動的に解除されるまでの時間(秒)。0を設定すると無効になります。20
closeModalGamepadモーダルを閉じるために使用されるゲームパッドボタン(Enum.KeyCode)。ButtonA
closeModalKeyboardモーダルを閉じるために使用されるキーボードキー(Enum.KeyCode)。E
completeModalTextスカベンジャーハントが完了したときにトークントラッカーをクリックした後に表示されるモーダルのテキスト。"ご参加いただきありがとうございます!"
infoModalTextトークントラッカーをクリックしたときに表示されるモーダルのテキスト。"ハントを完了するためにすべてのトークンを見つけてください"
tokenRotationSpeedトークンが回転する速度(1秒あたりの度数)。回転を防ぐには0に設定します。20
nextArrowImage現在のモーダルページの後に表示されるモーダルページがあることを示すために使用される画像。"rbxassetid://8167172095"
openTokenTrackerGamepadトークントラッカーをアクティブにした後に表示されるモーダルを示すために使用されるゲームパッドボタン(Enum.KeyCode)。ButtonY
openTokenTrackerKeyboardトークントラッカーをアクティブにした後に表示されるモーダルを示すために使用されるキーボードキー(Enum.KeyCode)。Y
openTokenTrackerGamepadButtonImageトークントラッカーをアクティブにするために使用されるゲームパッドボタンの画像。"rbxassetid://8025860488"
regionIconリージョンに入るときにトークントラッカーの横に表示されるアイコン。"rbxassetid://8073794624"
tokenIconトークンを収集する際にトークントラッカーの横に表示されるアイコン。"rbxassetid://8073794477"
tokenTrackerPositionSmallDevice電話などの小型デバイスでのトークントラッカーUIの位置(UDim2)。(1, 0, 0, 84)
tokenTrackerPositionLargeDeviceタブレットやPCなどの大型デバイスでのトークントラッカーUIの位置(UDim2)。(1, 0, 1, -16)
useRegionsトークンの代わりにリージョンを使用します。false
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureClient({
infoModalText = "私のスカベンジャーハントへようこそ!",
completeModalText = "私のスカベンジャーハントを楽しんでいただきありがとうございます!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})

configureServer

configureServer(config: table)

configテーブル内の以下のキー/値を介して、デフォルトのサーバーサイド設定オプションをオーバーライドします。この関数は、Scriptからのみ呼び出すことができます。

キー説明デフォルト
tokenTagCollectionServiceがスカベンジャーハントで使用されるすべてのトークンまたはリージョンを見つけるために使用するタグ。"ScavengerHuntPart"
datastoreNameスカベンジャーハントで各プレイヤーの収集進行状況を保存するために使用されるDataStoreの名前。"ScavengerHuntTokens"
resetOnPlayerRemovingtrueに設定すると、プレイヤーが体験から離れるときにユーザーの進行状況がリセットされます。これは、スカベンジャーハントをテストしている際に進行状況を保存しない便利です。false
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})

disable

disable()

スカベンジャーハントのすべてのUIを隠し、すべての入力イベントリスナーの接続を解除し、プレイヤーがトークンを収集したりリージョンと相互作用したりするのを防ぎます。この関数は、Scriptからのみ呼び出すことができます。

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.disable()

enable

enable()

スカベンジャーハントのすべてのUIを表示し、すべての入力イベントリスナーを接続し、プレイヤーがトークンを収集したりリージョンと相互作用したりできるようにします。この関数は、Scriptからのみ呼び出すことができます。

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.enable()

イベント

collected

プレイヤーがトークンに衝突したりリージョンに入ったりしたときに発火します。接続された関数は、トークンに衝突したプレイヤーまたはリージョンに入ったプレイヤーのPlayerと、衝突したトークンの名前または入ったリージョンの名前を受け取ります。このイベントは、Scriptでのみ接続できます。

パラメータ
player: Playerトークンに衝突したユーザーまたはリージョンに入ったユーザー。
itemName: string 衝突したトークンの名前または入ったリージョンの名前。
totalCollected: numberplayerで表されるユーザーによって収集されたトークンの合計数。
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)

allCollected

プレイヤーがすべてのトークンを収集するか、スカベンジャーハントのすべてのリージョンに入ると発火します。接続された関数は、すべてのトークンを収集したPlayerを受け取ります。このイベントは、Scriptでのみ接続できます。

パラメータ
player: Playerすべてのトークンを収集したプレイヤーまたはすべてのリージョンに入ったプレイヤー。
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. "がハントを完了しました!")
end)

showInfoModal

useCustomModals 設定オプションがtrueに設定されているときに、プレイヤーがトークントラッカーをクリックすると発火します。このイベントは、LocalScriptでのみ接続できます。

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)

showCompleteModal

useCustomModals 設定オプションがtrueに設定され、プレイヤーがスカベンジャーハントですべてのトークンを収集したときに、プレイヤーがトークントラッカーをクリックすると発火します。このイベントは、LocalScriptでのみ接続できます。

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)

コールバック

hideOtherGuis

hideOtherGuis(callback: function)

このコールバックはモーダルが表示される直前に実行され、モーダルが表示される前に、全体的なScreenGuisまたはその内の要素を無効にすることができます。GUIの可視性の詳細とサンプルコードを参照してください。

showOtherGuis

showOtherGuis(callback: function)

このコールバックは、モーダルが解除された直後に実行され、全体的なScreenGuisまたはその内の要素を有効にすることができます。GUIの可視性の詳細とサンプルコードを参照してください。

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。