Com a tabela de classificação criada, os jogadores precisam de algo para coletar. Para isso, você precisa criar um item 3D para os jogadores encontrarem no mundo. Abaixo está um vídeo do processo de os jogadores colherem itens.
Construir um Item
Os itens na experiência são modelos 3D que os jogadores usam uma ferramenta para colher. Cada item, uma vez colhido, desaparece e depois reaparece após uma quantidade limitada de tempo.
Para o item, consulte o seu documento de design de jogo. Esta série usa cristais como exemplo.
Crie um Objeto, seja usando peças ou objetos encontrados por usuários confiáveis no Mercado.
Se desejar, baixe a parte de cristal com este link. Para adicioná-lo, clique com o botão direito no Workspace e selecione Inserir do Arquivo .
Se usando sua própria parte, agrupe todas as peças em um Modelo . Um jeito de fazer isso é selecionar todos os itens, clicar com o botão direito em uma peça e selecionar Grupo . Isso cria um modelo que organiza suas peças.
Certifique-se de que todas as peças estão ancoradas .
Então os itens não podem ser colhidos enquanto eles desaparecem, crie um BoolValue chamado CanHarvest para rastrear seu status.
In Properties for CanHarvest, check the Valor caixa. Checking the value box makes the boolean true, meaning players can harvest the item.
Criando uma Ferramenta
Os jogadores precisam de algo como um machado ou uma pá para coletar itens com. No Roblox, os itens que os jogadores podem equipar e usar são chamados de ferramentas . Essa lição usa uma ferramenta de iniciante com todas as peças e uma animação já feita que você pode personalizar mais tarde.
Adicionando a Ferramenta
Para os jogadores usarem a ferramenta de iniciante, baixe e coloque-a no StarterPack.
No Explorador, under Workspace, right-click on StarterPack. Then, select Inserir a partir do Arquivo .
Selecione o arquivo baixado, starterTool.rbxm.
Teste seu projeto. Os jogadores devem estar equipados com a ferramenta assim que eles iniciar. No jogo, pressione 1 para equipar ou colocar a ferramenta. Clique com o botão esquerdo para balançá-la.
Código da Ferramenta
Se a ferramenta atingir um objeto colhedível e o jogador tiver espaço suficiente em sua bolsa, o número de itens do jogador aumenta em 1 na tabela de classificação. Harvestar um item faz com que ele desapareça por alguns segundos e fique não colhedível por alguns segundos antes de reaparecer. Isso incentiva os jogadores a explorar para encontrar mais itens, em vez de apenas clicar no mesmo item.
Configurando o Script
Neste ponto, adicione um script à ferramenta. Este script lida com o que acontece quando a ferramenta toca um Objetocolhedível.
In StarterPack, under StarterTool, add a new script named ToolScript.
No script, escreva um comentário descritivo no topo e, em seguida, crie variáveis para armazenar a parte da ferramenta e a ferramenta em si.
-- Dá aos jogadores o item quando eles tocarem uma parte colhívellocal tool = script.Parentlocal toolPart = tool.Handle
Verificando por Itens
Quando a ferramenta toca um Objeto, ele verifica se esse objeto possui CanHarvest dentro e se o botão está definido como Verdadeiro.
Crie uma nova função chamada onTouch() com um parâmetro chamado partTouched.
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)endNessa função, crie uma variável local chamada canHarvest. Em seguida, use a função FindFirstChild() para ver se há um botão CanHarvest na raiz daquele part.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")endAgora o script precisa verificar se havia realmente algo encontrado e, se sim, executar o código. Para fazer isso, crie uma declaração if onde a condição é canHarvest. Se algo existir em canHarvest, essa declaração é avaliada para verdadeiro.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendNa declaração if, adicione uma declaração de print para ver se o script está funcionando. Você pode codificar a lógica para coletar itens depois de ter certeza de que está funcionando.
if canHarvest then-- Usado para testar se o código está funcionandoprint("Found an item")endSob a declaração end da função, adicione toolPart.Touched:Connect(onTouch). Isso permite que o script verifique se algo está tocando a ferramenta (ou neste caso, sua Manipulador / alça) e, se sim, chame onTouch().
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)Jogue o projeto e use a ferramenta em um item colhedível (clique com o botão esquerdo para balançar). Certifique-se de ver a mensagem "Encontrou um item" na janela de saída.
Dicas de solução de problemas
Se você não ver o mensagem, tente as seguintes dicas.
- Se você estiver usando peças e malhas personalizadas, é possível obter um erro. O script só funciona se o objeto CanHarvest for uma filha da peça que a ferramenta está tocando.
- Certifique-se de que a ferramenta esteja no StarterPack, não no Workspace.
- Verifique se a peça está ancorada.
Obtendo Estatísticas do Jogador
Antes de aumentar os itens do jogador, a ferramenta deve encontrar a localização de quantos itens um jogador tem na tabela de classificação desse jogador. Depois que a ferramenta tiver acesso à tabela de classificação, ela pode alterar o número de itens do jogador.
Primeiro, obtenha o jogador usando a ferramenta. No ToolScript, em local item = toolitem e acima da função personalizada, digitar:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)Na próxima linha, encontre as estatísticas de líderes do jogador usando a função FindFirstChild().
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)Sob local playerStats, crie variáveis para armazenar as estatísticas dos itens e espaços.
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
Verificando um Objeto Colhedível
Agora que o script de ferramentas tem as variáveis playerItems e playerSpaces criadas, você pode começar a dar aos jogadores um item. Use a função criada para verificar se o objeto que toca a ferramenta pode ser colhido, e se o jogador tiver espaço suficiente na mochila para aumentar os itens mostrados na leaderboard em um.
O script precisará de uma declaração if com duas condições para ser atendida. Comece criando uma declaração if, então adicione as seguintes condições, conectadas com a palavra-chave 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 thenendendendNa própria declaração if, adicione aos itens do jogador ao digitar playerItems.Value += 1.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endendJogue seu projeto; use sua ferramenta para colher um item e verificar que o número de itens aumentou.
Restaurando o Item
Quando o item for colhido, ele será redefinido de duas maneiras:
- O item desaparecerá e não será interagível
- CanHarvest definido como falso
O item então voltará ao normal depois de um curto tempo. Desta forma, os jogadores só recebem um item para cada colheita, e precisam procurar ao redor por mais tempo enquanto o original é redefinido.
Sob onde os itens são adicionados, configure canHarvest para falso. Ao fazer o valor de canHarvest falso assim que os jogadores colherem o item, o script não dará mais de um item por ferramenta atingida.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendDepois de definir o valor para falso, configure a Transparência da peça para 1 (invisível) e CanCollide para falso, o que significa que os jogadores não podem tocá-lo.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseendDigite task.wait(5) para dar tempo para o item ser redefinir. 5 é um número sugerido, e talvez diferem por quanto tempo você gostaria de ter sua experiência.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)endDepois da espera, faça o oposto do código anterior, configurando o CanHarvest para verdadeiro e redefinindo a Transparência e CanCollide para seus valores originais.
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueendJogue o projeto e verificar / conferir:
- O jogador só recebe 1 item para colher um item.
- O item desaparece e depois reaparece depois de cinco segundos.
Dicas de solução de problemas
Neste ponto, se uma das verificações não passar, tente uma das seguintes abaixo.
- Verifique se a Invisibilidade e a Colisão de CanCollide estão escritas e capitalizadas exatamente.
- Certifique-se de usar canHarvest.Value e não canHarvest = true.
Complete o Script de Ferramentas
Uma versão final do script pode ser referenciado abaixo.
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
-- Resetar parteTouched, o item colhido
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Faça o item colhido reaparecer e usável novamente
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)