이렇게 하면 게임 루프의 마지막 단계에 도착합니다 - 업그레이드를 구입합니다. 플레이어가 아이템 가방의 크기를 늘리는 업그레이드를 구입하도록 허용하면 더 많은 아이템을 여행당 구매할 수 있고 심지어 더 많은 골드를 얻을 수 있습니다.
상점 생성
각 상점에는 플레이어가 더 큰 아이템 가방을 구입하려면 클릭하는 버튼이 있습니다. 상점 자체는 표면 GUI, 부품에 텍스트를 書く 수 있는 아이템을 허용하는 부품입니다.
표지판 생성
작업 공간에서 Shop이라는 이름의 새로운 모델을 생성합니다.
In Shop, 새 BuyButton 블록 부품을 만듭니다.
구매 버튼에서 +를 클릭하고 GUI에 스크롤하여 새로운 표면 GUI를 추가합니다.
표면 GUI에서 BuyText라는 이름의 새 텍스트 레이블을 추가합니다. 부품에 작은 레이블이 나타납니다.
부품이 어떻게 만들어졌는지에 따라 레이블은 다른 곳에 있을 수 있습니다. 사이드에 텍스트 레이블이 표시되지 않으면 표면 GUI로 이동하고 얼굴 속성을 찾습니다. 속성을 변경하여 텍스트 레이블을 표시할 때까지 수정합니다.
표지판 텍스트 변경
현재 TextLabel은 플레이어가 볼 수있는 작은 크기이며 크기를 조정해야합니다.
In the BuyText properties, click on the arrow next to 크기 . Change the 오프셋 for X (left and right) and Y (up and down) to 0.
X 및 Y의 크기 를 0.5로 변경하여 정사각형을 만듭니다.
텍스트 레이블 속성에 스크롤하고 앵커 포인트 의 왼쪽 화살표를 클릭하십시오. 0.5에 대해 X와 Y를 입력합니다. 이렇게 하면 레이블의 일부가 뷰 밖으로 이동하지만 다음에 올바르게 배치됩니다.
속성에서 스크롤 다운 및 위치 를 엽니다. 크기를 X 및 Y에 대해 0.5로 변경하여 상자가 중앙에 있도록 합니다.
In the BuyText properties, scroll-down and change Text 를 설명적인 값으로 변경합니다. 예를 인스턴스: "Buy Larger Bag: 100 gold".
Check TextScaled 를 on 에 설정하려면 자동으로 텍스트를 조정하여 상자에 맞게 맞춥니다.
클릭 감지기 추가
플레이어는 상점을 클릭하여 아이템을 구매하지만 단순히 그것을 터치하지 않습니다. 스크립트는 클릭 감지기를 사용하여 플레이어가 상점 표지판을 클릭했는지 여부를 알 수 있습니다. ClickDetectors 는 사용자가 문을 열거나 다른 환경 요소와 상호 작용하는 것과 같은 환경의 개체를 허용합니다.
구매 버튼에 ClickDetector를 추가합니다.
In BuyButton, 새로운 스크립트인 BuyScript를 추가하고 설명적인 코멘트를 제공합니다.
In BuyScript, 버튼 부품을 저장하고 클릭 감지기를 클릭하기 위해 변수를 생성합니다.
-- 플레이어가 스페이스를 늘리는 업그레이드를 구매하려면 버튼을 클릭하세요local buyButton = script.Parentlocal clickDetector = buyButton.ClickDetector이름이 giveUpgrade()인 새 함수를 생성하여 플레이어의 공간을 업그레이드합니다. 플레이어가 버튼을 클릭할 때마다 함수는 플레이어의 공간을 업그레이드합니다.
local buyButton = script.Parentlocal clickDetector = buyButton.ClickDetectorlocal function giveUpgrade(player)end함수 후에, MouseClick 이벤트를 giveUpgrade() 함수에 연결합니다.
local function giveUpgrade(player)endclickDetector.MouseClick:Connect(giveUpgrade)giveUpgrade()에 프린트 문을 추가하여 함수를 테스트하십시오.
local function giveUpgrade(player)print("Someone clicked the button.")end플레이 프로젝트. 버튼을 클릭하고 출력 창에 텍스트를 볼 수 있는지 확인하십시오.
문제 해결 팁
문제: 버튼을 클릭하거나 마우스 커서가 버튼에 나타나지 않습니다.
- ClickDetector 개체가 해당 부품의 자식이라는 점을 확인하십시오.
- 캐릭터가 버튼에 충분히 가까이 있는지 확인하십시오. 또는 도구가 장착되지 않은지 확인하십시오.
업그레이드 구매
작동하는 버튼을 사용하여 주문을 처리하고 업그레이드된 가방을 대체하여 플레이어의 골드를 제거합니다.
업그레이드 변수 추가
업그레이드는 두 개의 변수가 있습니다: 업그레이드의 비용과 얼마나 많은 공간이 있습니다.
In BuyScript, under local clickDetector , 다음과 같은 변수를 두 개 생성합니다.
- newSpace : 업그레이드가 구매될 때 추가되는 공간.
- upgradeCost : 단일 업그레이드 비용
-- 업그레이드에 대한 변수local newSpaces = 10local upgradeCost = 100
업그레이드 부여
플레이어에게 업그레이드를 판매하기 전에 그들에게 충분한 돈이 있는지 확인해야 합니다. 그들이 그렇다면 최대 공간을 추가합니다.
In giveUpgrade() , 다음을 입력하여 플레이어의 순위표를 가져와 플레이어의 골드 및 공간 변수에 액세스할 수 있습니다.
local function giveUpgrade(player)print("Someone clicked the button")-- 다른 IntValues를 얻으려면 플레이어의 순위표를 가져옵니다.local playerStats = player:FindFirstChild("leaderstats")if playerStats then-- 플레이어의 돈과 공간을 가져와 변경을 적용합니다local playerGold = playerStats:FindFirstChild("Gold")local playerSpaces = playerStats:FindFirstChild("Spaces")endend스페이스에 대한 변수를 작성한 후 playerGold 값이 업그레이드 비용과 같거나 더 작은 경우 if 문을 만듭니다.
local function giveUpgrade(player)local playerStats = player:FindFirstChild("leaderstats")if playerStats thenlocal playerGold = playerStats:FindFirstChild("Gold")local playerSpaces = playerStats:FindFirstChild("Spaces")-- 플레이어가 업그레이드를 살 수있는 충분한 돈이 있는지 확인합니다if playerGold and playerSpaces and playerGold.Value >= upgradeCost thenendendendif 문에서 플레이어의 골드에서 업그레이드 비용을 뺍니다.
if playerGold and playerSpaces and playerGold.Value >= upgradeCost then-- 플레이어의 돈으로 아이템 비용을 뺄playerGold.Value -= upgradeCostend다음 줄에 플레이어의 현재 공간 수와 새로운 공간 할당량을 업그레이드할 때 할당된 새 공간을 추가합니다.On the next line, add the number of the player's current spaces along with the new spaces granted per upgrade.
if playerGold and playerSpaces and playerGold.Value >= upgradeCost thenplayerGold.Value -= upgradeCostplayerSpaces.Value += newSpacesend프로젝트를 플레이하고 순위표를 확인하여 공간 업그레이드가 작동하는지 확인하십시오.
문제 해결 팁
이 시점에서 업그레이드는 작동하지 않습니다. 다음 중 하나를 시도해 보세요.
- Make sure anything in the () of FindFirstChild() 의 both 측에 인용구가 있는지, like 1> "_leaderstats"1> 입니다.
- FindFirstChild의 각 문자열이 PlayerSetup 스크립트의 IntValue의 이름과 정확히 동일한지 확인하십시오. 예를 들어, 코드에서 루비를 돈으로 사용하는 경우 FindFirstChild("Rubies") 가 있어야 합니다.
- Make sure that giveUpgrade() 는 clickDetector.MouseClick 위에 있습니다.
BuyScript 스크립트 완료
스크립트의 완성된 버전은 아래에서 참조할 수 있습니다.
-- 플레이어가 맥스 스페이스를 업그레이드하는 버튼을 클릭하도록 하세요
local buyButton = script.Parent
local clickDetector = buyButton.ClickDetector
-- 업그레이드에 대한 변수
local newSpaces = 10
local upgradeCost = 100
local function giveUpgrade(player)
print("Someone clicked the button")
-- 다른 IntValues를 얻으려면 플레이어의 순위표를 가져옵니다.
local playerStats = player:FindFirstChild("leaderstats")
if playerStats then
-- 플레이어의 돈과 공간을 가져와 변경을 적용합니다
local playerGold = playerStats:FindFirstChild("Gold")
local playerSpaces = playerStats:FindFirstChild("Spaces")
-- 플레이어가 업그레이드를 살 수있는 충분한 돈이 있는지 확인합니다
if playerGold and playerSpaces and playerGold.Value >= upgradeCost then
print("Player can buy item")
-- 플레이어의 돈으로 아이템 비용을 뺄
playerGold.Value -= upgradeCost
playerSpaces.Value += newSpaces
end
end
end
clickDetector.MouseClick:Connect(giveUpgrade)