ScavengerHunt 開発者モジュール は、プレイヤーに体験を探索するための本質的にゲーム化された方法を提供し、自然に彼らを全体の場所へと紹介します。プレイヤーの進行状況は永続的であるため、スカベンジャーハントはセッションにわたって続けることができます。
モジュールの使用方法
インストール
ScavengerHuntモジュールを体験で使用するには:
スタジオのウィンドウメニューまたはホームタブツールバーから、ツールボックスを開き、クリエイターストアタブを選択します。

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

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

エクスプローラーウィンドウで、ScavengerHuntモデル全体をReplicatedStorageに移動させます。体験を実行すると、モジュールが動作を開始します。
トークンの使用
スカベンジャーハントモジュールは、プレイヤーが検索して収集するアイテムとしてトークンを使用します。このモジュールには、3Dワールドに配置できる1つのトークンモデルが付属しています。
モジュールのメインフォルダ内のWorkspaceフォルダにあるToken1メッシュを見つけます。

Token1を最上層のWorkspace階層に移動させ、希望する位置に配置します。
トークンにユニークな名前を付けます。この名前は、モジュールが各プレイヤーが収集したトークンを追跡するために使用されます。
さらにトークンを追加するには、既存のトークンを複製し、ユニークな名前を付けます。
バンドルされたメッシュトークンを使用したくない場合、ModelまたはBasePartの任意のオブジェクトが機能しますが、以下の条件を満たす必要があります:
オブジェクトにはCollectionServiceタグとしてScavengerHuntPartが必要です。必要に応じて、モジュールが使用するCollectionServiceタグ名は、configureServer呼び出しでtokenTagに別の値を設定することによって変更できます。
オブジェクトには、トークンが収集されたときに表示される「フレーバーテキスト」を設定した子のStringValueインスタンスが含まれている必要があります。

モデル 
MeshPart
リージョンの使用
リージョンはトークンと少し異なり、プレイヤーがそれらに入ると「収集済み」としてマークされた大きなエリアです。さらに、プレイヤーがリージョンを離れると、フレーバーテキストのモーダルが自動的に消去され、そのリージョン自体がワークスペースから削除されます。
リージョンの周りにブロックや球体などの固定されたパーツを作成します。モジュールは、プレイヤーがリージョンと物理的に衝突しないように、ランタイムでCanCollideプロパティを自動的に無効にします。
固有の名前を付けます。この名前は、モジュールが各プレイヤーがエントリーしたリージョンを追跡するために使用します。
パーツのプロパティのタグセクションを使用して、ScavengerHuntPartタグをパーツに適用し、CollectionServiceが検出できるようにします。必要に応じて、モジュールが使用するタグ名は、configureServer呼び出しでtokenTagに別の値を設定することによって変更できます。
リージョンに入った際に表示される「フレーバーテキスト」を設定した子のStringValueインスタンスを含めます。

設定
モジュールはほとんどのユースケースで動作するようにあらかじめ設定されていますが、簡単にカスタマイズできます。たとえば、トークンの回転速度を変更し、モーダル情報メッセージをカスタマイズするには:
StarterPlayerScriptsに新しいLocalScriptを作成し、名前をConfigureScavengerHuntに変更します。
新しいスクリプトに以下のコードを貼り付けます。
LocalScript - ConfigureScavengerHuntlocal 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要素を表示することもできます。
useCustomModalsがtrueに設定されている場合、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の可視性
デフォルトでは、スカベンジャーハントは情報モーダルまたは完了モーダルが表示されると、すべてのScreenGuisとCoreGuis(プレイヤーリストを除く)を隠します。この自動隠蔽動作を上書きして、どの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 |
LocalScriptlocal 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からのみ呼び出すことができます。
| キー | 説明 | デフォルト |
|---|---|---|
| tokenTag | CollectionServiceがスカベンジャーハントで使用されるすべてのトークンまたはリージョンを見つけるために使用するタグ。 | "ScavengerHuntPart" |
| datastoreName | スカベンジャーハントで各プレイヤーの収集進行状況を保存するために使用されるDataStoreの名前。 | "ScavengerHuntTokens" |
| resetOnPlayerRemoving | trueに設定すると、プレイヤーが体験から離れるときにユーザーの進行状況がリセットされます。これは、スカベンジャーハントをテストしている際に進行状況を保存しない便利です。 | false |
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureServer({tokenTag = "GreenGem",})
disable
disable()
スカベンジャーハントのすべてのUIを隠し、すべての入力イベントリスナーの接続を解除し、プレイヤーがトークンを収集したりリージョンと相互作用したりするのを防ぎます。この関数は、Scriptからのみ呼び出すことができます。
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.disable()
enable
enable()
スカベンジャーハントのすべてのUIを表示し、すべての入力イベントリスナーを接続し、プレイヤーがトークンを収集したりリージョンと相互作用したりできるようにします。この関数は、Scriptからのみ呼び出すことができます。
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.enable()
イベント
collected
プレイヤーがトークンに衝突したりリージョンに入ったりしたときに発火します。接続された関数は、トークンに衝突したプレイヤーまたはリージョンに入ったプレイヤーのPlayerと、衝突したトークンの名前または入ったリージョンの名前を受け取ります。このイベントは、Scriptでのみ接続できます。
| パラメータ | |
|---|---|
| player: Player | トークンに衝突したユーザーまたはリージョンに入ったユーザー。 |
| itemName: string | 衝突したトークンの名前または入ったリージョンの名前。 |
| totalCollected: number | playerで表されるユーザーによって収集されたトークンの合計数。 |
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の可視性の詳細とサンプルコードを参照してください。