The スカベンジャーハント 開発者モジュール は、プレイヤーに体験を探検するための内在的にゲーミファイされた方法を提供し、全体の場プレースにオーガニックに紹介します。プレイヤーの進捗は永続するので、セッション間でのスカベンジャーハントが続けられます。
モジュールの使用
インストール
エクスペリエンスで ScavengerHunt モジュールを使用するには:
ビュータブから、ツールボックスを開き、クリエイターストアタブを選択します。
モデル の順序が選択されていることを確認し、 すべて表示 ボタンをクリックして、 カテゴリ を選択します。
ロケートしてクリックして 開発モジュール タイル。
宝さがし モジュールを見つけてクリックするか、3D ビューにドラッグアンドドロップします。
エクスプローラー ウィンドウ で、 スカベンジャーハント モデル全体を ServerScriptService に移動します。エクスペリエンスを実行すると、モジュールは複数のサービスに分配され、実行を開始します。
トークンを使用する
スカベンジャーハントモジュールは、 トークン をプレイヤーが検索して集めるアイテムとして使用します。モジュールは、3D 世界に配置できる 1つのトークンモデルで提供されます。
モジュールのメインフォルダ内の トークン1 メッシュを ワークスペース フォルダに見つけます。
トークン1 をトップレベルの ワークスペース 階層に移動し、必要な場所に配置する
トークンに ユニークな名前 を与え;この名前は、モジュールが各プレイヤーが収集したトークンを追跡する方法です。
より多くのトークンを追加するには、既存のトークンを複製し、ユニークな名前を付けます。
バンドルされたメッシュトークンを使用したくない場合、次の条件を満たしていれば、Model または BasePart でもよいです:
オブジェクトには CollectionService タグの ScavengerHuntPart があります。必要に応じて、モジュールが使用する CollectionService タグ名を変更するには、tokenTag で異なる値を設定して configureServer 呼び出しで変更できます。
オブジェクトには、トークンが収集されたときに表示される "フレーバーテキスト" に設定された子インスタンスが含まれています。
モデル メッシュパーツ
領域を使用する
地域は、プレイヤーがそれらに入ると「収集」としてマークされる大きな領域とは若干異なります。さらに、プレイヤーが地域を離れると、フレーバーテキストモードが自動的に解除され、地域自体がワークスペースから削除されます。
ブロックや球などの地域の周りに固定されたパーツを作成します。モジュールは、実行時に CanCollide プロパティを自動的に無効にして、プレイヤーが領域に物理的に衝突しないようにします。
それに ユニークな名前 を付けます。この名前は、モジュールが各プレイヤーが入力した領域を追跡する方法です。
パーツのプロパティの タグ セクション、または Studio の タグエディタ を使用して、パーツにタグ ScavengerHuntPart を適用し、CollectionService が検出できるようにします。必要に応じて、モジュールが使用するタグ名を変更するには、tokenTag に異なる値を設定して configureServer 呼び出しで変更できます。
子インスタンスを含める StringValue 「フレーバーテキスト」に設定して、領域が入力されたときに表示する。
構成
モジュールはほとんどの使用ケースで動作するようプリコンフィグされていますが、簡単にカスタマイズできます。たとえば、トークンの回転速度を変更し、モーダル情報メッセージをカスタマイズするには:
In スタータープレイヤースクリプト , 新しい LocalScript を作成し、名前を スカベンジャーハントを構成する に変更します。
新しいスクリプトに次のコードを貼り付けます。
ローカルスクリプト - ConfigureScavengerHuntlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureClient({infoModalText = "Welcome to my Scavenger Hunt!",completeModalText = "Thanks for playing my Scavenger Hunt!",tokenRotationSpeed = 60,})
コレクションイベント
プレイヤーがトークンを回収したり、領域に入ったりするたびに、集めたイベントが発動します。サーバー側から Script このイベントを聞き、それに応じて応答できます。接続された関数は、トークンと衝突した Player または領域に入ったトークンまたは領域の名前を受け取ります。
同様に、プレイヤーが すべて のトークンを集めたり、 すべて のタグ付き領域に入ったりすると、allCollected イベントが発動し、接続された機能が関連する Player を受け取ります。この機能はプレイヤーごとに 1回だけ発動し、そのプレイヤーにバッジ、新しい領域へのアクセス、経験中の通貨などを報酬として使用できます。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)
カスタムGUI
このモジュールは、デフォルトの GUI をカスタマイズするための複数のオプションを提供しますが、代わりにカスタム GUI 要素を表示することもできます。
useCustomModals が true に設定されていると、configureClient 関数で、プレイヤーがトークントレーサーを有効にするたびに showInfoModal イベントが発動します。同様に、showCompleteModal イベントは、プレイヤーがスカベンジャーハントですべてを集めたときに発動します。これらのイベントの両方を LocalScript で聴くことができます。
本地スクリプト
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("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 コールバックを含め、自分のカスタムロジックで応答します。
本地スクリプト
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("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 = "Remains visible when displaying modals"
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 リファレンス
機能
client を構成する
configureClient(config: table )
次のキー/値を使用して、デフォルトのクライアント側構成オプションをオーバーライドし、config テーブルの中の。この機能は LocalScript からのみ呼び出すことができます。
キー | 説明 | デフォルト |
---|---|---|
autoDismissTime | モーダルが自動的に拒否されたり、次のページにナビゲートしたりする前の秒数。無効化効にするには 0 に設定します。 | 20 |
closeModalGamepad | ゲームパッドのボタンは、モーダルを閉じるのに使用されます (Enum.KeyCode). | ButtonA |
closeModalKeyboard | モーダルを閉じるために使用されるキーボードキー ( Enum.KeyCode )。 | E |
completeModalText | スカベンジャーハントが完了した後に表示されるモーダルに表示するテキスト。 | 「参加してくれてありがとう!」 |
infoModalText | トークントレーサーをクリックした後に表示されるモーダルに表示するテキスト。 | 「ハントを完了するためのすべてのトークンを見つける」 |
tokenRotationSpeed | トークンが回転する速度、秒ごとの度数。回転を防ぐには、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 | 代わりに トークン の代わりに、領域 を使用します。 | 偽 |
本地スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureClient({infoModalText = "Welcome to my Scavenger Hunt!",completeModalText = "Thanks for playing my Scavenger Hunt!",tokenRotationSpeed = 60,navigationBeam = {lightEmission = 1},modal = {textSize = 14},})
configuredサーバー
configureServer(config: table )
次のキー/値を使用して、デフォルトのサーバー側の構成オプションをオーバーライドし、config テーブルの中の。この機能は Script からのみ呼び出すことができます。
キー | 説明 | デフォルト |
---|---|---|
tokenTag | スカベンジャーハントで使用されるすべてのトークンまたは領域を見つけるために CollectionService が使用するタグ | 「ScavengerHuntPart」 |
datastoreName | スカベンジャーハントで各プレイヤーのコレクション進捗を保存するために使用される DataStore の名前 | 「ScavengerHuntTokens」 |
resetOnPlayerRemoving | 真の場合、ユーザーがエクスペリエンスを終了すると、ユーザーの進行をリセットします。宝さがしをテストしながら進行を保存しないのに便利です。 | 偽 |
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
無効化
無効化()
スカベンジャーハントのすべての UI を非表示にし、すべての入力イベントリスナーを切断し、プレイヤーがトークンを収集したり、領域と対話したりするのを防ぎます。この機能は Script からのみ呼び出すことができます。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
有効化
有効化()
スカベンジャーハントの全 UI を表示し、すべての入力イベントリスナーを接続し、プレイヤーがトークンを収集し、領域と対話できるようにします。この機能は Script からのみ呼び出すことができます。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
イベント
収集された
プレイヤーがトークンに衝突したり、領域に入ったりすると発火します。接続された関数は、トークンと衝突した Player または領域に入り、衝突したトークンの名前または領域に入った名前を受け取ります。このイベントは、Script でのみ接続できます。
パラメータ | |
---|---|
プレイヤー: Player | トークンと衝突したユーザーや領域に入ったユーザー。 |
itemName: string | 衝突したトークンの名前または入力された領域。 |
totalCollected: number | ユーザーを表す player によって収集されたトークンの合計数。 |
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)
全て収集済み
プレイヤーがすべてのトークンを集めたり、すべての領域に入ったりしたときに発炎します。接続された関数は、すべてのトークンを収集した Player を受け取り、プレイヤーごとに1回だけ発射されます。このイベントは、Script でのみ接続できます。
パラメータ | |
---|---|
プレイヤー: Player | すべてのトークンを集めたプレイヤーや、すべての領域に入ったプレイヤー。 |
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)
showInfoモードル
プレイヤーが useCustomModals 設定 オプションを真に設定したときにトークントレーサーをクリックすると、炎が発生します。このイベントは、LocalScript でのみ接続できます。
本地スクリプト
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)
完全モードルを表示 showCompleteModal
プレイヤーが useCustomModals 設定 オプションを true に設定し、スカベンジャーハントですべてのトークンを収集したときにトークントラッカーをクリックすると、炎が上がります。このイベントは、LocalScript でのみ接続できます。
本地スクリプト
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)
コールバック
他のGUIを隠す
hideOtherGuis(cb: function )
このコールバックは、モーダルが表示される前に即座に実行され、モーダルが表示される前に、ScreenGuis またはその内の要素全体を無効にすることができます。詳細とサンプルコードは、GUI ビジビリティ を参照してください。
他のGUIを表示
showOtherGuis(cb: function )
このコールバックは、モーダルが拒否された後すぐに実行され、全体の ScreenGuis またはその内の要素を有効にすることができます。詳細とサンプルコードは、GUI ビジビリティ を参照してください。