The スカベンジャーハント 開発者モジュール は、プレイヤーにエクスペリエンスを探索するためのゲーム化された方法を提供し、場プレース全体にオーガニックに紹介します。プレイヤーの進行状況は持続的であり、スカベンジャーハント はセッション間で続けられます。
モジュール使用
インストール
エクスペリエンスで ScavengerHunt モジュールを使用するには:
モデル ソートが選択されていることを確認してから、 すべてを表示 ボタンをクリックして、 カテゴリ のための 1>ボタン1> をクリックします。
デバッグモジュール タイルを見つけてクリックします。
宝さがし モジュールを見つけ、クリックするか、3D ビューにドラッグアンドドロップします。
In the Explorer window, move the entire ScavengerHunt model into ServerScriptService . エクスペリエンスを実行すると、モジュールは各サービスに分配され、実行を開始します。
トークンを使用する
スカベンジャーハントモジュールは、トークン を使用して、プレイヤーが検索し、集めるアイテムをアイテムとして提供します。モジュールには、3D 世界に配置できるトークンモデルが 1 つあります。
モジュールのメインフォルダの ワークスペース フォルダ内の トークン1 メッシュを見つけます。
移動 トークン1 到最上レベルの ワークスペース 階層に移動し、必要な場所に配置します。
トークンに ユニークな名前 を与えます。この名前は、モジュールが各プレイヤーが集めたトークンを追跡する方法です。
トークンを追加するには、既存のトークンを複製し、ユニークな名前を付けます。
バンドルされたメッシュトークンを使用したくない場合は、Model または BasePart のいずれかが機能します。ただし、次のクリテリオに従っている必要があります:
オブジェクトには、 CollectionService タグの ScavengerHuntPart があります。望む場合、モジュールが使用する CollectionService タグ名は、 2> токенタグ2> を設定して、 5>Server5> 呼び出しで変更できます。
オブジェクトには、StringValue の子が含まれており、トークンが集められたときに「flavor text」を表示するように設定されています。
領域を使用する
領域はトークンと若干異なります。大きなエリアは、プレイヤーが入ると「収集」としてマークされます。また、プレイヤーが領域を離れると、フレーバーテキストモーダルが自動的に再起動し、領域自体がワークスペースから削除されます。
ブロックや球など、地域の周りに固定部分を作成します。モジュールは、プレイヤーが地域と物理的に衝突しないようにランタイムで CanCollide プロパティを自動的に無効にします。
ユニークな名前を付けてください。これは、モジュールが入力する各プレイヤーの領域を追跡する方法です。
子 StringValue インスタンスを含め、領域を入力すると、「flavor text」を表示するようにします。
構成
モジュールはほとんどの使用ケースに対応するようにプリコンフィグされていますが、簡単にカスタマイズできます。たとえば、トークンの回転速度を変更し、モーダル情報メッセージをカスタマイズするなど:
In StarterPlayerScripts で、新しい LocalScript を作成し、 ConfigureScavengerHunt に名前を変更します。
新しいスクリプトに以下のコードを挿入します。
ローカルスクリプト - スカベンジャーハントを構成する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,})
コレクションイベント
プレイヤーがトークンを集めたり、地域に入ったりするたびに、集めたイベントが発動します。このイベントは、Script サーバー側から聞くことができ、Player がトークンや入力した地域に衝突したときに受信します。接続された関数は、
同様に、プレイヤーが すべて のトークンを集めたり、 すべて のタグ付きの領域に入ると、すべてを集めたイベントが発動し、接続された関数は 1> Class.Player1> を使用して報��
スクリプト
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 で設定された createClient 機能の 1> showInfoModal1> イベントは、プレイヤーがトークントラッカーを有効にするたびに発動します。同様に、4> showCompleteModal4>
ローカルスクリプト
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 (プレイヤーリストを除く) のすべての Class.CoreGui|CoreGuis を非表示にします。2> hideOtherGuis2>
ローカルスクリプト
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 リファレンス
機能
配置する
Class.LocalScript テーブルの次のキー/値を通じて、デフォルトのクライアント側の設定オプションをオーバーライドします。この関数は 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 | 小さなデバイス ( UDim2 ) のトークントラッカー UI の位置。 | (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},})
Server を構成する
concept テーブルの次のキー/値を介して、デフォルトのサーバー側の構成オプションをオーバーライドします。この関数は Script からのみ呼び出すことができます。
キー | 説明 | デフォルト |
---|---|---|
tokenTag | スカベンジャーハントで使用されるすべてのトークンまたは領域を見つけるために CollectionService によって使用されるタグ。 | 「スカベンジャーハントパーツ」 |
datastoreName | スカベンジャーハントで使用される DataStore の名前。 | 「スカベンジャーハントトークン」 |
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 | トークンと区域を入力したユーザー。 |
項目名: string | 衝突したトークンの名前または入力された領域。 |
収集した合計: 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)
ショー情報モーダル
プレイヤーが 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)
ショーコンプリートモーダル
プレイヤーが useCustomModals の true オプションを設定しているときにトークントラッカーをクリックすると、このイベントは 1> player1> がスカベンジャーハントですべてのトークンを集めたときにのみ接続できます。このイベントは 4>Class.LocalScript4> にの
ローカルスクリプト
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)
コールバック
OtherGuis を隠す
このコールバックは、モーダルが表示される直前に実行され、モーダルが表示される前に ScreenGuis またはその内の要素をすべて無効にすることができます。詳細は、「GUI の可視性」を参照してください。サンプルコードは 1> Class.ScreenGui|ScreenGuis1> のコールバック1> です。
OtherGuis を表示
このコールバックは、モーダルが終了した直後に実行され、ScreenGuis 全体またはその内の要素を有効にすることができます。詳細は、GUI の可視性を参照してください。サンプルコードは、Class.ScreenGui|ScreenGuis の下にあります。