순위표가 생성된 후, 플레이어는 수집할 무언가가 필요합니다. 이를 위해, 플레이어가 세계에서 찾을 수 있도록 3D 아이템을 만들어야 합니다. 아래는 플레이어가 아이템을 수확하는 과정의 비디오입니다.
아이템 빌드
경험의 아이템은 플레이어가 수확하는 3D 모델입니다. 각 아이템은 수확된 후 사라지고 한정 시간 후에 다시 나타납니다.
아이템에 대해서는 게임 디자인 문서로 돌아가십시오. 이 시리즈는 크리스털을 예로 들어 설명합니다.
마켓플레이스에서 신뢰할 수 있는 사용자가 찾은 부품 또는 개체를 사용하여 개체를 생성합니다.
원하는 경우 이 크리스털 부품을 연결 으로 다운로드하십시오. 추가하려면 작업 공간을 마우스 오른쪽 버튼으로 클릭하고 파일에서 삽입 을 선택합니다.
자신의 부품을 사용하는 경우 모델 에 모든 부품을 그룹화합니다. 이 방법 중 하나는 모든 항목을 선택하고 부품을 마우스 오른쪽 버튼으로 클릭하고 그룹화를 선택하는 것입니다. 이렇게 하면 부품이 정렬됩니다.
모든 부품이 앵커 로 고정되어 있는지 확인하십시오.
그래서 아이템은 사라지면 수확할 수 없으며, CanHarvest라는 이름의 BoolValue 를 만들어 상태를 추적합니다.
In Properties for CanHarvest, check the 값을 수확할 수 있습니다. 값 상자를 확인하면 플레이어가 아이템을 수확할 수 있습니다.
도구 생성
플레이어는 도구, 즉 도끼 또는 삽을 사용하여 아이템을 수집할 필요가 있습니다. Roblox에서 플레이어가 장착하고 사용할 수 있는 아이템은 도구 라고 합니다. 이 레슨에서는 모든 부품이 있는 시작 도구를 사용하여 나중에 사용자가 사용자 정의할 수 있는 도구를 설명합니다.
도구 추가
플레이어가 시작 도구를 사용할 수 있도록 다운로드하고 시작 팩에 배치하십시오.
탐색기에서 작업 공간에 오른쪽 클릭한 다음 파일에서 삽입 을 선택합니다.
다운로드한 파일을 선택하십시오, starterTool.rbxm .
프로젝트를 플레이테스트하십시오. 플레이어는 시작하자마자 도구를 장착해야 합니다. 게임 내에서 도구를 장착하려면 1을 누르십시오. 왼쪽 클릭하여 도구를 장착하거나 떠나십시오.
도구 코딩
도구가 수확 가능한 개체를 타격하고 플레이어의 가방에 충분한 공간이 있으면 플레이어의 아이템 수는 리더보드1을 올립니다. 아이템을 수확하면 몇 초 동안 사라지고 몇 초 동안 다시 나타나지 않습니다. 이렇게 하면 플레이어가 더 많은 아이템을 탐색
스크립트 설정
이제 도구에 스크립트를 추가합니다. 이 스크립트는 도구가 수확 가능한 개체를 만질 때 발생하는 일을 처리합니다.
StarterPack의 스타터 도구 아래에 있는 ToolScript라는 이름의 새 스크립트를 추가합니다.
스크립트에서 위에 설명 코멘트를 작성한 다음 도구 부품과 도구 자체를 저장하는 변수를 만듭니다.
-- 수확 가능한 부분에 플레이어가 닿을 때 아이템을 제공합니다.local tool = script.Parentlocal toolPart = tool.Handle
아이템 검사
도구가 개체를 터치할 때마다 해당 개체에 CanHarvest가 있는지 여부를 확인하고 부울을 설정하는 경우 True로 설정됩니다.
새로운 함수 생성 하 onTouch() 에 매개 변수 하 partTouched 입니다.
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)end이 함수에서 로컬 변수를 만들고 canHarvest 이라는 이름의 변수를 생성합니다. 그런 다음 FindFirstChild() 함수를 사용하여 해당 부모의 자식에 있는지 여부를 확인하십시오.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")end이제 스크립트는 실제로 무언가가 발견되었는지 확인해야 하고, 그렇다면 코드를 실행해야 합니다. 이를 수행하려면 if 문을 만들어야 합니다. 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)프로젝트를 플레이하고 수확 가능한 항목에서 도구를 사용하십시오(왼쪽 클릭하여 스윙). 출력 창에 "아이템발견"메시지가 표시되는지 확인하십시오.
문제 해결 팁
메시지를 보지 못하면 다음 팁을 시도해 보세요.
- 사용자 정의 부품 및 메쉬를 사용하는 경우 오류가 발생할 수 있습니다. 스크립트는 도구가 터치하는 부품의 자식만 작동합니다.
- 도구가 작업 공간이 아닌 스타터 팩에 있는지 확인하십시오.
- 부품이 고정되어 있는지 확인하십시오.
플레이어 통계 얻기
플레이어의 아이템을 증가하기 전에 도구는 플레이어가 해당 플레이어의 리더보드얼마나 많은 아이템이 있는지 찾아야 합니다. 도구가 리더보드액세스할 수 있게 되면, 플레이어의 아이템 수를 변경할 수 있습니다.
먼저, 도구를 사용하여 플레이어를 얻습니다. 도구 스크립트에서 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)Under local playerStats , 아이템 및 공간 통계를 저장하기 위해 변수를 만듭니다.
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
수확할 수 있는 개체를 검사하는 중
이제 도구 스크립트에 playerItems 및 playerSpaces 변수가 생성되었으므로 플레이어에게 아이템을 제공할 수 있습니다. 도구에 대한 플레이어의 접근을 확인하기 위해 만든 함수를 사용하여 플레이어에게 아이템을 제공할 수 있습니다.
스크립트는 두 가지 조건을 충족해야 합니다. 먼저 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를 참조하여 아이템을 설정하십시오. 플레이어가 항목을 수확할 때 canHarvest의 값을 참조하여 스크립트는 하나의 도구당 하나의 항목만 반환합니다.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendend값을 거짓으로 설정한 후 부품의 투명도를 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를 트루로 설정하고 투명도 및 충돌 값을 원래 값으로 재설정합니다.
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueend프로젝트를 플레이하고 확인:
- 플레이어는 아이템을 수확하는 1개의 아이템만 획득합니다.
- 항목은 다섯 초 후에 사라지고 다시 나타납니다.
문제 해결 팁
이 시점에서 검사 중 하나가 통과하지 않으면 다음 중 하나를 시도해 보세요.
- Transparency와 CanCollide가 정확하게 스펠링되고 캐탈로긴되는지 확인하십시오.
- Harvest.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)