리더보드가 생성되면 플레이어는 수집할 무언가가 필요합니다.그러려면 플레이어가 세계에서 찾을 수 있는 3D 아이템을 만들어야 합니다.아래는 플레이어가 아이템을 수확하는 과정의 비디오입니다.
아이템 빌드
경험의 항목은 플레이어가 도구를 사용하여 수확하는 3D 모델입니다.수확된 각 아이템한 번 사라지고 제한된 시간 후에 다시 나타납니다.
아이템의 경우 게임 디자인 문서로 돌아가십시오. 이 시리즈는 예제로 크리스털을 사용합니다.
부품이나 마켓플레이스에서 신뢰할 수 있는 사용자가 찾은 개체를 사용하여 개체를 만듭니다.
원하는 경우 이 링크로 크리스털 부품을 다운로드하십시오. 추가하려면 작업 영역을 마우스 오른쪽 버튼으로 클릭하고 파일에서 삽입 을 선택합니다.
자체 부품을 사용하는 경우, 모든 부품을 모델 으로 그룹화합니다.이를 수행하는 한 가지 방법은 모든 항목을 선택하고, 부품을 마우스 오른쪽 버튼으로 클릭하고, 그룹 을 선택하는 것입니다.이렇게 하면 부품을 구성하는 모델이 생성됩니다.
부품이 모두 고정되었는지 확인하십시오 .
따라서 아이템이 사라지는 동안 수확할 수 없으므로, 상태를 추적하기 위해 BoolValue 라는 이름의 아이템을 생성합니다.
CanHarvest의 속성에서 값 상자를 확인하십시오. 값 상자를 확인하면 부울이 true가 되므로 플레이어가 아이템을 수확할 수 있습니다.
도구 만들기
플레이어는 도끼나 삽과 같은 아이템을 수집하기 위해 필요합니다.Roblox에서 플레이어가 장착하고 사용할 수 있는 아이템은 도구 라고 합니다.이 단원에서는 모든 부품과 이미 만든 애니메이션을 사용하는 스타터 도구를 사용하고 나중에 사용자 지정할 수 있습니다.

도구 추가
플레이어가 스타터 도구를 사용하려면 다운로드하여 스타터 팩에 배치하십시오.
탐색기에서 작업 영역 아래에서 StarterPack을 마우스 오른쪽으로 클릭합니다. 그런 다음 파일에서 삽입 을 선택합니다.
다운로드한 파일을 선택하십시오, starterTool.rbxm .
프로젝트를 플레이테스트합니다.플레이어는 시작하는 즉시 도구를 장착해야 합니다.게임 내에서 1를 눌러 도구를 장착하거나 보관하십시오.왼쪽 클릭하여 흔들어 보세요.
도구 코딩
도구가 수확 가능한 개체에 타격하고 플레이어가 가방에 충분한 공간을 가지고 있으면 리더보드에서 플레이어의 아이템 수가 1 증가합니다.아이템을 수확하면 몇 초 동안 사라지고 재출현하기 전에 몇 초 동안 수확할 수 없게 됩니다.이렇게 하면 플레이어가 동일한 항목을 클릭하는 대신 더 많은 아이템을 찾기 위해 탐색하도록 유도합니다.
스크립트 설정
이 시점에서 도구에 스크립트를 추가합니다. 이 스크립트는 도구가 수확 가능한 개체에 접촉할 때 발생하는 일을 처리합니다.
스타터팩에서 스타터툴 아래에 ToolScript라는 새 스크립트를 추가합니다.
스크립트에서 맨 위에 설명 주석을 작성한 다음 도구 부품과 도구 자체를 저장하기 위한 변수를 만듭니다.
-- 수확 가능한 부품을 만질 때 플레이어에게 아이템을 제공합니다local tool = script.Parentlocal toolPart = tool.Handle
아이템 확인
도구가 개체에 접촉할 때마다 해당 개체에 CanHarvest가 있는지 확인하고 부울이 True로 설정되어 있는지 확인합니다.
매개 변수 이름이 onTouch() 인 새 함수를 생성하고 매개 변수 이름이 partTouched 인 매개 변수를 사용합니다.Create a new function named with a parameter named .
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)end그 함수에서 canHarvest라는 로컬 변수를 만듭니다.그런 다음, FindFirstChild() 함수를 사용하여 해당 부분의 부모에 CanHarvest 부울이 있는지 확인하십시오.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")end이제 스크립트는 실제로 무언가가 발견되었는지 확인하고, 그렇다면 코드를 실행해야 합니다.이를 수행하려면 조건이 canHarvest 인 if 문을 만듭니다.canHarvest에 뭔가가 존재하면 이 문은 참으로 평가됩니다.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendif 문에서 스크립트가 작동하는지 확인하기 위해 인쇄 문을 추가합니다. 작동하는지 확신한 후 아이템 수집 논리를 코딩할 수 있습니다.
if canHarvest then-- 코드가 작동하는지 테스트하는 데 사용print("Found an item")end함수의 end 문에서, toolPart.Touched:Connect(onTouch) 를 추가합니다.이렇게 하면 스크립트가 도구(또는 이 경우 핸들)에 무언가가 접촉하고 있는지 확인하고, 그렇다면 onTouch() 을 호출합니다.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)프로젝트를 플레이하고 수확 가능한 항목에서 도구를 사용하십시오(왼쪽 클릭하여 흔들기). 출력 창에 "아이템 찾음" 메시지가 표시되는지 확인하십시오.
문제 해결 팁
메시지를 보지 못하면 다음 팁을 시도하십시오.
- 사용자 지정 부품과 메쉬를 사용하는 경우 오류가 발생할 수 있습니다.스크립트는 도구가 터치하는 부품의 자식인 CanHarvest 개체만 작동합니다.
- 도구가 스타터 팩에 있고 작업 영역에 있지 않은지 확인하십시오.
- 부품이 고정되었는지 확인합니다.
플레이어 통계 가져오기
플레이어의 아이템을 늘리기 전에 도구는 플레이어가 리더보드에 보유하고 있는 아이템 수를 찾아야 합니다.도구가 리더보드에 액세스하면 플레이어의 아이템 수를 변경할 수 있습니다.
먼저, 도구를 사용하여 플레이어를 가져옵니다. 도구 스크립트에서, local item = toolitem 아래, 사용자 지정 함수 위에, 다음을 입력합니다:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)다음 줄에서는 FindFirstChild() 함수를 사용하여 플레이어의 리더스탯을 찾습니다.
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)아래에서 local playerStats , 항목과 공간 통계를 저장하는 변수를 만듭니다.
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
수확할 수 있는 개체 확인
이제 도구 스크립트에 playerItems 및 playerSpaces 변수가 생성되었으므로 플레이어에게 아이템을 줄 수 있습니다.생성된 함수를 사용하여 도구에 접촉하는 개체를 수확할 수 있는지 확인하고, 플레이어가 리더보드에 표시된 항목을 하나 늘릴 수 있는 충분한 공간이 있는지 확인합니다.
스크립트에는 충족해야 하는 두 가지 조건이 있는 if 문이 필요합니다.if 문을 만들어 시작하고, and 키워드로 연결된 다음 조건을 추가합니다.
- canHarvest.Value == true
- playerItems.Value < playerSpaces.Value
local function onTouch(partTouched)local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenendendendif 문 자체에서 playerItems.Value += 1를 입력하여 플레이어의 아이템에 추가합니다.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endend프로젝트를 플레이하고 도구를 사용하여 아이템을 수확하고 아이템 수가 증가했는지 확인합니다.
아이템재설정
아이템이 수확될 때 두 가지 방법으로 재설정됩니다:
- 아이템이 사라지고 상호 작용할 수 없게 됩니다
- CanHarvest가 false로 설정됨
아이템은 짧은 시간 후에 정상으로 돌아갑니다.이런 방식으로, 플레이어는 각 수확에 대해 하나의 아이템만 얻고, 원래 재설정되는 동안 더 많은 것을 찾아야 합니다.
항목이 추가되는 아래에서 canHarvest를 false로 설정합니다.플레이어가 아이템을 수확하는 즉시 값의 canHarvest를 false로 만들면 스크립트는 도구당 하나 이상의 아이템을 제공하지 않습니다.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendend값을 false로 설정한 후 부품의 투명도를 1(보이지 않음)으로 설정하고 CanCollide를 false로 설정하여 플레이어가 그것을 만질 수 없게 합니다.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseend유형 task.wait(5) 를 입력하여 아이템을 재설정할 시간을 제공합니다. 5는 제안된 숫자이며, 경험에 대해 원하는 시간이 길수도 있습니다.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)end대기 후, CanHarvest를 true로 설정하고 Transparency와 CanCollide를 원래 값으로 재설정하여 이전 코드의 반대를 수행합니다.
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueend프로젝트를 플레이하고 확인:
- 플레이어는 아이템 수확을 위해 아이템 1개만 얻습니다.
- 아이템은 사라지고 5초 후에 다시 나타납니다.
문제 해결 팁
이 시점에서 검사 중 하나가 통과하지 않으면 다음 중 하나를 시도하십시오.
- 투명도와 CanCollide가 정확하게 스펠링되고 대문자로 표시되는지 확인하십시오.
- canHarvest.Value를 사용하고 canHarvest = true가 아닌지 확인하십시오.
완전한 툴스크립트 완료
스크립트의 완성된 버전은 아래에서 참조할 수 있습니다.
local toolPart = script.Parent
local tool = toolPart.Parent
local backpack = tool.Parent
local player = backpack.Parent
local playerStats = player:FindFirstChild("leaderstats")
local playerItems = playerStats:FindFirstChild("Items")
local playerSpaces = playerStats:FindFirstChild("Spaces")
local function onTouch(partTouched)
local canHarvest = partTouched:FindFirstChild("CanHarvest")
if canHarvest then
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
playerItems.Value += 1
canHarvest.Value = false
-- 부분 터치 재설정, 수확된 아이템
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- 수확된 아이템을 다시 나타나게 하고 다시 사용 가능하게 만들기
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)