보물 찾기

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

ScavengerHunt 개발자 모듈은 플레이어에게 내재적으로 게임화된 방법을 제공하여 경험을 탐색하고, 전체 플레이스유기농으로 소개합니다.플레이어 진행 상황은 영구적이므로 세션 간에 찾기 사냥이 계속될 수 있습니다.

모듈 사용

설치

경험에서 ScavengerHunt 모듈을 사용하려면:

  1. 보기 탭에서 도구 상자 를 열고 크리에이터 스토어 탭을 선택합니다.

    Toolbox toggle button in Studio
  2. 모델 정렬이 선택되었는지 확인한 다음 모두 보기 버튼을 클릭하여 카테고리를 확인하십시오.

  3. 찾아서 클릭하십시오 개발자 모듈 타일.

  4. 탐색 모듈 스캐버 헌트 를 찾아 클릭하거나 3D 뷰에 드래그 앤 드롭하세요.

  5. 탐색기 창에서 전체 ScavengerHunt 모델을 ServerScriptService 로 이동합니다.경험을 실행하면 모듈이 다양한 서비스에 배포되고 실행을 시작합니다.

토큰 사용

찾기 모듈은 플레이어가 검색하고 수집하는 아이템으로 토큰 을 사용합니다.모듈은 3D 세계에 위치할 수 있는 토큰 모델 하나로 제공됩니다.

  1. 모듈의 메인 폴더 내 토큰1 메시를 작업 공간 폴더에서 찾으십시오.

  2. 이동 토큰1 을 최상위 수준의 작업 영역 계층으로 이동하고 원하는 위치에 배치합니다.

  3. 토큰에 유일한 이름 을 부여하십시오; 이 이름은 모듈이 각 플레이어가 수집한 토큰을 추적하는 방법입니다.

  4. 더 많은 토큰을 추가하려면 기존 토큰을 복제하고 고유한 이름을 지정하십시오.

패키지된 메시 토큰을 사용하지 않으려면, 다음 조건을 충족하는 모든 Model 또는 BasePart 작동합니다.

  • 개체에는 CollectionService 태그가 있습니다. ScavengerHuntPart .원하는 경우 모듈이 사용하는 CollectionService 태그 이름을 변경하려면 tokenTag 에서 다른 값을 설정하여 configureServer 호출에서 변경할 수 있습니다.

  • 개체에는 토큰이 수집될 때 표시되도록 "맛 텍스트"에 설정된 자식 StringValue

    모델
    메쉬 파트

지역 사용

지역은 플레이어가 들어가면 "수집"으로 표시되는 큰 영역과 약간 다르며, 플레이어가 들어가면 "수집"으로 표시됩니다.또한 플레이어가 지역을 떠나면 맛 텍스트 모달이 자동으로 거부되고 지역 자체가 작업 영역에서 제거됩니다.

  1. 블록이나 구와 같은 지역 주변에 고정된 부품을 만듭니다.모듈은 런타임에 자동으로 CanCollide 속성을 비활성화하여 플레이어가 지역과 실제로 충돌하지 않도록 합니다.

  2. 독특한 이름을 입력하십시오 **** . 이 이름은 모듈이 각 플레이어가 들어간 지역을 추적하는 방법입니다.

  3. 부품의 속성 또는 Studio의 태그 편집기 섹션을 사용하여 태그 를 부품에 적용하여 가 감지하도록 합니다.원하는 경우 모듈이 사용하는 태그 이름을 변경하려면 tokenTag 에서 다른 값을 설정하여 configureServer 호출에서 변경할 수 있습니다.

  4. 지역이 입력될 때 표시할 "맛 텍스트"에 설정된 자식 인스턴스 세트를 포함하십시오. StringValue 포함하십시오.

구성

모듈은 대부분의 사용 사례에서 작동하도록 미리 구성되었지만 쉽게 사용자 지정할 수 있습니다.예를 들어, 토큰 회전 속도를 변경하고 모달 정보 메시지를 사용자 지정하려면:

  1. In 스타터 플레이어 스크립트 , 새로운 LocalScript 를 만들고 스캐버거 헌트 구성 으로 이름을 바꿉니다.

  2. 새 스크립트에 다음 코드를 붙여넣습니다.

    로컬스크립트 - 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 을 받으며, 해당 토큰이나 영역의 이름입니다.

마찬가지로, 플레이어가 모든 토큰을 수집하거나 모든 태그가 달린 영역에 들어갈 때, 모든 수집 이벤트가 발생하고 연결된 함수가 연관된 을 받습니다.이 함수는 플레이어당 한 번만 발동되며, 그 플레이어에게 배지 , 새로운 영역에 대한 액세스 , 경험 내 통화 등을 보상하는 데 사용할 수 있습니다.

스크립트

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 요소를 표시하도록 선택할 수 있습니다.

useCustomModalstrue 에 설정되어 있으면 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 가시성

기본적으로 정보 모달이나 완료 모달이 나타날 때 스캐버지 헌트는 모든 ScreenGuisCoreGuis (플레이어 목록 제외)를 숨깁니다.이 자동 숨기기 동작을 재정의하고 프로그래밍 방식으로 어떤 GUI가 계속 표시되어야 하는지 결정하려면 hideOtherGuisshowOtherGuis 호출백과 함께 자체 사용자 지정 로직으로 응답하십시오.

로컬 스크립트

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 구성(config: table )

다음 키/값을 사용하여 config 테이블의 기본 클라이언트 측 구성 옵션을 재정의합니다.이 함수는 LocalScript 호출할 수 있습니다.

설명기본
autoDismissTime모달이 자동으로 거부되거나 다음 페이지로 이동하기 전의 시간(초)을 설정합니다. 0으로 설정하여 비활성화합니다.20
closeModalGamepad모달을 닫는 데 사용되는 게임패드 버튼(Enum.KeyCode).ButtonA
closeModalKeyboard모달을 닫는 데 사용되는 키보드 키(Enum.KeyCode).E
completeModalText사냥꾼이 완료되면 표시되는 모달에 표시할 텍스트. 토큰 추적기를 클릭하면 나타나는 모달입니다. Text to show on the modal that appears after clicking the token tracker when the scavenger hunt is complete.“참여해 주셔서 감사합니다!”
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
},
})

서버 구성

서버 구성(config: table)

다음 키/값을 사용하여 config 테이블의 기본 서버 측 구성 옵션을 재정의합니다.이 함수는 Script 호출할 수 있습니다.

설명기본
tokenTagCollectionService에서 사용하는 태그는 사냥꾼에서 사용된 모든 토큰이나 지역을 찾는 데 사용됩니다.“탐색 사냥 파트”
datastoreName사냥꾼이 각 플레이어의 수집 진행률을 저장하기 위해 사용하는 DataStore의 이름.“탐색꾼 토큰”
resetOnPlayerRemovingtrue이면 사용자가 경험을 떠날 때 사용자의 진행률을 재설정합니다; 약탈 사냥을 테스트하는 동안 진행률을 저장하지 않는 데 편리합니다.거짓
스크립트

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를 받고, 플레이어마다 한 번만 발동됩니다.이 이벤트는 단독으로만 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)

표시 정보 모달

플레이어가 구성 옵션을 true로 설정했을 때 토큰 추적기를 클릭하면 발생합니다.이 이벤트는 단독으로만 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

플레이어가 구성 옵션을 으로 설정하고 사냥꾼에서 모든 토큰을 수집했을 때 토큰 추적기를 클릭하면 발생합니다.이 이벤트는 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)

콜백

다른 구이 숨기기

다른 기기 숨기기(콜백: function )

이 콜백은 모달이 표시되기 바로 전에 실행되며, 모달이 표시되기 전에 전체 ScreenGuis 또는 모달 내의 요소를 비활성화할 수 있습니다.자세한 내용과 샘플 코드는 GUI 표시에 참조하십시오.

다른 구이 표시

showOtherGuis(콜백: function )

이 콜백은 모달이 거부된 후에 즉시 실행되며, 전체 ScreenGuis 또는 내부의 요소를 활성화할 수 있습니다.자세한 내용과 샘플 코드는 GUI 표시에 참조하십시오.