Clonando itens e objetos

Atenção!!! Não apenas copie o código sem ler as explicações. Elas são necessárias tanto para entender o que você está fazendo como também para saber se está sendo colocado corretamente!


Todo jogos que jogamos utilizam o sistema de clones. Seja para ter várias cópias do mesmo inimigo, surgir os projéteis de uma arma, obter itens de um inimigo derrotado...enfim.

Se levarmos algo como Grow a Garden como referência, estaríamos criando clones das sementes que plantamos, e para isso precisamos que a planta original exista dentro do jogo mas fora do acesso e visão do nosso jogador. Normalmente isso é feito colocando o objeto abaixo do chão, longe o suficiente para ninguém interagir.

Para um teste inicial vamos fazer com que, ao interagir com o nosso objeto de 1 ponto, uma cópia exata seja criada. Vamos fazer isso adicionando algumas linhas ao código:

local prompt = script.Parent
local part = prompt.Parent

Essas duas variáveis que estamos criando (prompt e part) server só pra conectar meu código tanto ao ProximityPrompt que adicionamos anteriormente como também na Part que criamos (o bloco).

local copia = part:Clone()

o part:Clone() vai criar uma cópia do objeto que eu referenciei no meu código (no caso, a referência está como "part") e, se quisermos mudar alguma configuração desse clone quando ele aparecer podemos fazer isso utilizando sua variável copia.

copia.Parent = workspace
copia:PivotTo(part.CFrame - (Vector3.xAxis * 10))

Quando criamos um clone, o Roblox Studio não a coloca em nenhuma das pastas principais do projeto (Workspace, Players, ServerScriptServices, etc), então nossa parte ainda não existiria mesmo que a clonagem desse certo. Para o item conseguir existir vamos definir o parente dele como workspace, do jeito que fiz na primeira linha.

A segunda linha vai mover o clone para longe do objeto original, assim evitando que um fique exatamente em cima do outro.

No fim, seu código deve ficar algo assim:

local players = game:GetService("Players")
local prompt = script.Parent
local part = prompt.Parent


script.Parent.Triggered:Connect(function(jogador)
	local playerGui = jogador.PlayerGui
	local screenGui = playerGui:WaitForChild("ScreenGui")
	local textLabel = screenGui:WaitForChild("TextLabel")
	local pontos = textLabel:FindFirstChild("Pontos")
	pontos.Value = pontos.Value + 1
	local copia = part:Clone()
	copia.Parent = workspace
	copia:PivotTo(part.CFrame - (Vector3.xAxis * 10))
end)

Desafio 2: Destrua a cópia depois que o jogador interagir com ela