Com o placar criado, 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 coleta de itens dos jogadores.
Construir um Item
Os itens da experiência são modelos 3D que os jogadores usam uma ferramenta para colher. Cada item, uma vez coletado, desaparece e depois reaparece após um tempo limitado.
Para o item, consulte o seu documento de design de jogo. Esta série usa cristais como exemplo.
Crie um Objeto, usando partes ou objetos encontrados por usuários confiáveis no Mercado.
Se desejar, faça o download da parte de cristal com este link. Para adicioná-lo, clique com o botão direito do mouse no Workspace e selecione Insert from File .
Se estiver usando sua própria peça, agrupe todas as peças em um Modelo . Uma maneira 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 as peças estejam todas ancoradas .
Para que os itens não possam ser colhidos enquanto desaparecem, crie um BoolValue chamado CanHarvest para rastrear seu status.
Em Propriedades para CanHarvest, marque a caixa Valor . Marcando a caixa de valor torna o booleano verdadeiro, o que significa que os jogadores podem colher o item.
Criando uma Ferramenta
Os jogadores precisam de algo como um machado ou uma pá para coletar itens. Em Roblox, os itens que os jogadores podem equipar e usar são chamados de ferramentas . Esta lição usa uma ferramenta inicial com todas as partes e uma animação já feita que você pode personalizar mais tarde.
Adicionando a ferramenta
Para que os jogadores usem a ferramenta inicial, baixe-a e coloque-a no StarterPack.
No Explorador, em Workspace, clique com o botão direito do mouse no StarterPack. Em seguida, selecione Insert from File .
Selecione o arquivo baixado, starterTool.rbxm .
Teste seu projeto. Os jogadores devem estar equipados com a ferramenta assim que iniciar. No jogo, pressione 1 para equipar ou colocar a ferramenta. Clique com o botão esquerdo para balançá-la.
Codificando a Ferramenta
Se a ferramenta atingir um objeto colhível e o jogador tiver espaço suficiente em sua bolsa, a contagem de itens do jogador aumenta em 1 na tabela de classificação. Colher um item faz com que ele desapareça por alguns segundos e se torne não colhí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 em um Objetocolhível.
No StarterPack, em StarterTool, adicione um novo script chamado ToolScript.
No script, escreva um comentário descritivo no topo e depois crie variáveis para armazenar a peça da ferramenta e a ferramenta em si.
-- Dá aos jogadores um item quando eles tocam uma parte colhívellocal tool = script.Parentlocal toolPart = tool.Handle
Verificando itens
Sempre que a ferramenta toca em um Objeto, verifica se esse objeto tem CanHarvest dentro e se o booleano 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 booleano CanHarvest no pai dessa parte.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")endAgora o script precisa verificar se houve realmente algo encontrado e, se houver, correr o código. Para fazer isso, crie uma declaração if onde a condição é canHarvest. Se algo existir em canHarvest, essa declaração será avaliada como true.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendNa instrução if, adicione uma instrução print para ver se o script está funcionando. Você pode codificar a lógica para coletar itens depois de ter certeza de que funciona.
if canHarvest then-- Usado para testar se o código funcionaprint("Found an item")endSob a instrução end da função, ConnecttoolPart.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 colhível (clique com o botão esquerdo para balançar). Certifique-se de ver a mensagem "Encontrei um item" na janela de saída.
Dicas de solução de problemas
Se você não vir a 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 um filho da parte que a ferramenta está tocando.
- Certifique-se de que a ferramenta esteja no StarterPack, não na área de 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. Uma vez que a ferramenta tenha acesso à tabela de classificação, ela pode alterar a contagem de itens desse jogador.
Primeiro, pegue 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 liderança do jogador usando a função FindFirstChild().
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)Em 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 se há um objeto colhível
Agora que o script da ferramenta 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 na ferramenta pode ser colhido e se o jogador tem espaço suficiente em sua bolsa para aumentar os itens mostrados na tabela de classificação em um.
O script precisará de uma declaração if com duas condições a serem atendidas. Comece criando uma declaração if e adicione nas seguintes condições, conectadas à 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 digitando 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 se a contagem de itens aumentou.
Resetando o Item
Quando o item for colhido, ele será redefinido de duas maneiras:
- O item desaparecerá e não será interativo
- CanHarvest definido como falso
O item então voltará ao normal após pouco tempo. Desta forma, os jogadores só recebem um item por cada colheita, e precisam procurar mais enquanto o original é redefinido.
Em onde os itens são adicionados, defina canHarvest como falso. Ao tornar o valor de canHarvest falso assim que os jogadores colherem o item, o script não dará mais de um item por golpe de ferramenta.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendDepois de definir o valor em falso, defina a Transparência da peça em 1 (invisível) e CanCollide em falso, o que significa que os jogadores não podem tocá-la.
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 redefinir. 5 é um número sugerido, e talvez difera por quanto tempo você gostaria para sua experiência.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)endApós a espera, faça o oposto do código anterior, configurando o CanHarvest como verdadeiro e redefinindo a Transparência e o 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 por colher um item.
- O item desaparece e depois reaparece após cinco segundos.
Dicas de solução de problemas
Neste ponto, se um dos cheques não passar, tente um dos seguintes.
- Verifique se a Transparência e o CanCollide estão ortografados e escritos com precisão.
- Certifique-se de usar canHarvest.Value e não canHarvest = true.
ToolScript Completo
Uma versão finalizada do script pode ser referenciada 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
-- Redefinir parteTocada, o item colhido
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Faça com que o item coletado reapareça e seja utilizável novamente
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)