ScavengerHuntの開発者モジュールは、プレイヤーがあなたのバーチャル空間を探索するための本質的にゲーミフィケーションされた方法を提供し、プレース全体を有機的に紹介できるようにします。 プレイヤーの進行状況は永続的であるため、Scavenger Hunts はセッション間で継続できます。
モジュールの使用法
インストール
バーチャル空間でScavengerHuntモジュールを使用する方法
表示タブから、ツールボックスを開き、マーケットプレイスタブを選択します。
モデルのソートが選択されていることを確認し、カテゴリのすべてのボタンを表示をクリックします。
DEV モジュールタイルを見つけてクリックします。
Scavenger Huntモジュールを見つけてクリックするか、3D ビューにドラッグアンドドロップします。
エクスプローラウィンドウで、ScavengerHuntモデル全体をServerScriptServiceに移動します。 バーチャル空間を実行すると、モジュールはそれ自体をさまざまなサービスに配布し、実行を開始します。
トークンの使用
Scavenger hunt モジュールは、プレイヤーが検索して収集するアイテムとしてトークンを使用します。 モジュールには、3D ワールドに配置できるトークンモデルが 1 つ付属しています。
モジュールのメインフォルダのワークスペースフォルダにToken1メッシュを見つけます。
Token1を最上位レベルのワークスペース階層に移動し、必要な場所に配置します。
トークンにユニークな名前を付けます。 どのトークンをプレイヤーが収集したかをこの名前で追跡します。
トークンを追加するには、既存のトークンを複製し、ユニークな名前を付けます。
付属のメッシュトークンを使用したくない場合は、以下の基準を満たす限り、ModelまたはBasePartは動作します。
- オブジェクトにはScavengerHuntPartのCollectionServiceタグが付いています。 必要に応じて、モジュールが使用する CollectionService は、configureServerコールのtokenTagに別の値を設定することで変更できます。
- オブジェクトには、トークンが収集されたときに表示する「フレーバーテキスト」に設定された子StringValueインスタンスが含まれています。
領域の使用
領域は、トークンとは少し異なり、プレイヤーが入ると、「収集済」としてマークされる大きな領域です。 さらに、プレイヤーが領域を離れると、フレーバーテキストモーダルが自動的に削除され、領域自体がワークスペースから削除されます。
ブロックやスフィアなど、領域の周りにアンカーされた部分を作成します。 モジュールは、ランタイム時にCanCollideプロパティを自動的に無効化するため、プレイヤーが物理的に領域と衝突することはありません。
ユニークな名前を与えましょう。 この名前により、モジュールは各プレイヤーがどの領域を入力したかを追跡します。
ScavengerHuntPartの部分をCollectionServiceタグに割り当てます。 必要に応じて、モジュールが使用するタグ名は、configureServerコールのtokenTagに別の値を設定することで変更できます。
領域が入力されたときに表示する「フレーバーテキスト」に設定された子StringValueインスタンスを含めます。
設定
モジュールは、ほとんどのユースケースで動作するように事前設定されていますが、簡単にカスタマイズできます。 例えば、トークンの回転速度を変更し、モーダル情報メッセージをカスタマイズするには:
StarterPlayerScriptsで、新しいLocalScriptを作成して、それをConfigureScavengerHuntに名前変更します。
以下のコードを新しいスクリプトに貼り付けます。
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 人につき 1 回のみ発生し、そのプレイヤーにバッジ、新しいエリアへのアクセス、バーチャル空間内通貨などを与えるために使用できます。
Script
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がconfigureClient関数trueに設定されている場合、showInfoModalイベントは、プレイヤーがトークントラッカーをアクティブ化するたびに発生します。 同様に、showCompleteModalイベントは、プレイヤーが Scavenger Hunt のすべてのものを収集すると発生します。 これら両方のイベントをLocalScriptでリッスンすることができます。
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Show a custom info modal
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Show a custom complete modal
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
GUI の可視性
デフォルトでは、Scavenger Hunt は、情報モーダルまたは補完モーダルが表示されるときに、すべての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:WaitForChild("ScavengerHunt"))
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- Create a screen GUI that will not be hidden
local specialGuiInstance = Instance.new("ScreenGui")
-- Draw the screen GUI above the scavenger hunt GUI
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Add text label to the 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()
-- Hide all developer-defined screen GUIs
local instances = playerGui:GetChildren()
for _, instance in pairs(instances) do
if instance:IsA("ScreenGui") and not instance.Name == "ScavengerHunt" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- Hide specific core GUIs
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Show all developer-defined screen GUIs that were hidden
for _, instance in pairs(hiddenInstances) do
instance.Enabled = true
end
hiddenInstances = {}
-- Show specific core GUIs that were hidden
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
API リファレンス
関数
configureClient
configure(config:table):nil
デフォルトのクライアント側の設定オプションを、テーconfigブル内にある以下のキー/値を使用して上書きします。 この関数は、LocalScriptからのみ呼び出すことができます。
Script Editor
キー | 概要 | デフォルト |
---|---|---|
autoDismissTime | モーダルが自動的に解除されるか、次のページがある場合はそこに移動するまでの時間(秒)です。 0に設定すると無効になります。 | 20 |
closeModalGamepad | モーダルを閉じるために使用されるゲームパッドボタンです(Enum.KeyCode)。 | ButtonA |
closeModalKeyboard | モーダルを閉じるために使用されるキーボードのキーです(Enum.KeyCode)。 | E |
completeModalText | Scavenger Huntが完了してトークントラッカーをクリックした後に表示されるモーダルに表示されるテキストです。 | "Thanks for participating!" |
infoModalText | トークントラッカーをクリックした後に現れるモーダルに表示されるテキストです。 | "Find all the tokens to complete the hunt" |
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 | トークンの代わりに、領域を使用します。 | false |
モーダル
キー | 概要 | デフォルト |
---|---|---|
modal.backgroundColor | モーダル背景色です(Color3)。 | [0, 0, 0] |
modal.font | モーダルに表示されるテキストのフォントです(Enum.Font)。 | GothamMedium |
modal.textColor | モーダルに表示されるテキストの色です(Color3)。 | [255, 255, 255] |
modal.textSize | モーダルに表示されるテキストのサイズです。 | 16 |
useCustomModals | trueの場合、デフォルトモーダルは表示されません。 これにより、カスタムGUIに概説されているカスタムモーダルを表示できます。 | false |
useCustomTokenTracker | trueの場合、デフォルトトークントラッカーは表示されません。 これにより、代わりにカスタムトークントラッカーGUIを表示できます。 | false |
ナビゲーションビーム
キー | 概要 | デフォルト |
---|---|---|
showNavigationBeam | trueの場合、プレイヤーから最も近いトークンBeamが表示されます。 | true |
navigationBeam.color | ColorSequenceセグメントにわたるビームの色を定義します。 詳細については、Beam.Colorを参照してください。 | [255, 255, 255] → [255, 255, 255] |
navigationBeam.curveSize0 | ビームのベジェ曲線内の最初の制御点の位置です。 詳細については、Beam.CurveSize0を参照してください。 | 0 |
navigationBeam.curveSize1 | ビームのベジェ曲線内の2番目の制御点の位置です。 詳細については、Beam.CurveSize1を参照してください。 | 0 |
navigationBeam.faceCamera | ビームのセグメントが、向きに関係なく、常にカメラに面しているかどうか。 詳細については、Beam.FaceCameraを参照してください。 | true |
navigationBeam.lightEmission | ビームの色が背後の色とブレンドされる度合い。 詳細については、Beam.LightEmissionを参照してください。 | 0 |
navigationBeam.lightInfluence | ビームが環境の照明によって影響を受ける度合い。 詳細については、Beam.LightInfluenceを参照してください。 | 0 |
navigationBeam.segments | ビームが何本の直線セグメントで構成されているか。 | 10 |
navigationBeam.texture | ビーム上に表示されるテクスチャのアセットID。 | "rbxassetid://8081777495" |
navigationBeam.textureLength | navigationBeam.textureModeの設定に応じたビームのテクスチャの長さ。 詳細については、Beam.TextureLengthを参照してください。 | 1 |
navigationBeam.textureMode | ビームテクスチャがスケールして繰り返す方法(Enum.TextureMode)。 | Wrap |
navigationBeam.textureSpeed | テクスチャ画像がビームに沿って移動する速度。 | 1 |
navigationBeam.transparency | セグメントにわたるビームの透明性を定義するNumberSequence。 詳細については、Beam.Transparencyを参照してください。 | (0, 0) → (0.15, 1) → (1, 1) |
navigationBeam.width0 | ベースでのビームの幅(スタッド内)。 | 1 |
navigationBeam.width1 | 端のビームの幅(スタッド内) | 1 |
navigationBeam.zOffset | カメラに対するビームの表示がオフセットされるスタッド内の距離。 | 0 |
LocalScript
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},})
configureServer
configureServer(config:table):nil
デフォルトのサーバー側設定オプションは、configテーブル内の以下のキー/値を使用して上書きします。 この関数は、Scriptからのみ呼び出すことができます。
キー | 概要 | デフォルト |
---|---|---|
tokenTag | Scavenger Huntで使用されるすべてのトークンまたは領域を見つけるために、CollectionServiceによって使用されるタグ。 | "ScavengerHuntPart" |
datastoreName | Scavenger Huntが各プレイヤーのコレクションの進行状況を保存するために使用するDataStoreの名前。 | "ScavengerHuntTokens" |
resetOnPlayerRemoving | trueの場合、バーチャル空間を離れるときにユーザーの進行状況をリセットします。 宝さがしのテスト中に進行状況を保存しない場合に便利です。 | false |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
無効
disable():nil
Scavenger Hunt のすべての UI を非表示にし、すべての入力イベントリスナーを切断し、プレイヤーがトークンを収集したり、領域と対話したりするのを防止します。 この関数は、Scriptからのみ呼び出すことができます。
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
有効
enable():nil
Scavenger Hunt のすべての UI を表示し、すべての入力イベントリスナーを接続し、プレイヤーがトークンを収集して領域と対話できるようにします。 この関数は、Scriptからのみ呼び出すことができます。
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
イベント
収集済
collected(player:Player, itemName:string, totalCollected:number): RBXScriptSignal
プレイヤーがトークンに衝突したり、領域に入ったときに発生します。 接続された関数は、トークンに衝突した、または領域に入ったPlayerまたは領域に衝突したまたは領域に入ったトークンの名前を受け取ります。 このイベントには、Script内でのみ接続できます。
パラメータ | |
---|---|
プレイヤー:Player | トークンに衝突した、または領域に入ったユーザー。 |
itemName:string | 衝突したトークンの名前、または入力された領域。 |
totalCollected:number | playerで表示されるユーザーにより表示されるトークンの合計数。 |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)
allCollected
allCollected(player:Player): RBXScriptSignal
プレイヤーがすべてのトークンを収集したり、Scavenger Hunt のすべての領域に入ったときに発生します。 接続された関数は、すべてのトークンを収集したPlayerを受け取ります、そして、これはプレイヤーごとに一回だけ発生します。 このイベントには、Script内でのみ接続できます。
パラメータ | |
---|---|
プレイヤー:Player | すべてトークンを収集した、またはすべての領域に入ったプレイヤー。 |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)
showInfoModal
showInfoModal(): RBXScriptSignal
useCustomModals 設定オプションが true に設定されているときに、プレイヤーがトークントラッカーをクリックしたときに発生します。 このイベントは、LocalScript内でのみ接続できます
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
showCompleteModal(): RBXScriptSignal
useCustomModals設定オプションがtrueに設定されているときに、プレイヤーがトークントラッカーをクリックし、プレイヤーが Scavenger Hunt のすべてのトークンを収集したときに発生します。 このイベントは、LocalScript内でのみ接続できます
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)
コールバック
hideOtherGuis
hideOtherGuis(callback:function)
このコールバックは、モーダルが表示される直前に実行されます、これにより、モーダルが表示される前に、全体のScreenGuisまたはそれらの内の要素を無効化できます。 詳細とサンプルコードについてはGUI の可視性をご覧ください。
showOtherGuis
showOtherGuis(callback:function)
このコールバックは、モーダルが削除された直後に実行され、全体のScreenGuisまたはそれの内の要素を有効化できます。 詳細とサンプルコードについてはGUI の可視性をご覧ください。