Os jogadores podem obter feedback se suas ações estão fazendo ou não algo com animações.Isso pode ser uma árvore tremendo quando atingida, ou um animal de estimação saltitante quando alimentado.Neste caso, mostraremos como fazer um botão que se move quando o jogador clica nele.
Tween com animações
Uma maneira de animar objetos é usando adolescentes.Um treino , curto para meio, é o processo de mudar um valor inicial para um valor final em um determinado período de tempo.Adolescentes podem ser usados para alterar propriedades como posição, cor ou rotação.
Configuração do projeto
Para este projeto, um pré-adolescente moverá um objeto de uma posição de partida para uma posição de destino.
Determine qual parte você vai animar. No exemplo abaixo, 1 é o botão e 2 é a parede.
Na parte que se movimento, adicione um Detector de Clique e um script chamado TweenMove. Não renomeie o Detector de Clique.
Abra o script TweenMove. Em seguida, copie e cole o script abaixo.
-- Adolescentes trocam uma parte para frente e para trás com base em um eixo escolhido-- O botão tem um estado on/off que move a peça para a frente ou para tráslocal TweenService = game:GetService("TweenService")local button = script.Parentlocal clickDetector = button:FindFirstChildWhichIsA("ClickDetector")local buttonState = -1 -- Determina a direção do botão; -1 significa que ele vai pressionar, 1 significa que ele vai sairlocal inTween = false-- Variáveis personalizáveislocal TWEEN_TIME = 0.15local TWEEN_MOVE_DISTANCE = 1.5-- Variáveis de transiçãolocal buttonTweenInfo = TweenInfo.new(TWEEN_TIME, -- TempoEnum.EasingStyle.Quad, -- Estilo de FacilitaçãoEnum.EasingDirection.Out -- Direção de Facilitação)local function buttonPress()-- Se o botão estiver desaparecendo, evite que seja usado novamenteif inTween == true thenreturnend-- Calcular novo CFrame para posição do botãolocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)-- Crie um pré-adolescente e jogue-olocal tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})tweenButton:Play()inTween = true-- Na conclusão da pré-adolescência, faça o botão novamente utilizáveltweenButton.Completed:Connect(function()inTween = false-- Inverte o estado do botãobuttonState *= -1end)endclickDetector.MouseClick:Connect(buttonPress)Teste e clique no Objeto.Durante o teste, você pode notar que o objeto se move na direção ou distância errada.Isso pode ser personalizado na próxima seção.


Ajuste o movimento de interseção
Com o script adicionado, você pode personalizá-lo para atender às necessidades do seu jogo.O botão pode ser movido para mover-se em direções como para frente e para trás, ou para voltare para baixo.
Mudar posição
Lembre-se, pré-adolescentes transicionam de um valor inicial para um valor de objetivo.Este script usa CFrames para mover o botão em uma direção relativa à sua posição atual.Essa direção é controlada em Linha 28 do script.
Nessa linha, um novo CFrame é criado usando as coordenadas X, Y e Z. Neste exemplo, o bot se move em relação ao seu eixo Y.
-- Calcular novo CFrame para posição do botãolocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Para que o botão se mova em uma direção diferente , simplesmente substitua uma das coordenadas desejadas pela linha: TWEEN_MOVE_DISTANCE * buttonState.Defina todas as outras coordenadas para 0.
Por exemplo, essa linha o moverá em relação ao seu eixo X, em vez disso.
-- Calcular novo CFrame para posição do botãolocal offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Tempo e distância de meio-turno
O script inclui as seguintes variáveis que afetam o movimento do pré-adolescente.Nomes capitalizados como TWEEN_TIME são escritos especificamente para este script ser modificado.
Tente alterar o valor de uma variável abaixo:
- Linha 11 - TWEEN_TIME : O tempo em segundos que leva para um pré-adolescente acontecer.
- Linha 12 - TWEEN_MOVE_DISTANCE : A distância que o botão se move em studs.
Atualizar outras propriedades
A maioria das propriedades com um tipo de dado numérico pode ser dividida.Esta seção inclui algumas propriedades comuns, como rotação, que podem ser usadas para trazer mais feedback de jogadores para o seu jogo.Tenha em mente, você também pode transicionar várias propriedades de uma só vez.
Para uma lista completa de propriedades, consulte a página da API TweenService.
Girar
Para rotação, combine tweening e CFrames em vez de usar apenas Vector3.Os pré-adolescentes de rotação podem ser usados para fazer com que as criaturas se contorçam quando forem pegas, ou moedas giram enquanto são coletadas.
No próximo exemplo de script, a posição e a rotação da criatura são ambas alteradas quando clicadas para mostrar o quão feliz ela é quando está sendo acariciada.
O código abaixo girará um objeto com base no número de graus em TWEEN_ROT_ANGLES .
-- Usa tween para fazer o objeto girar para cima e reboundir
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Variáveis personalizáveis
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Variáveis de transição
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tempo
Enum.EasingStyle.Quad, -- Estilo de Facilitação
Enum.EasingDirection.Out, -- Direção de Facilitação
1, -- RepeatCount (quando menos que zero o pré-adolescente irá circular indefinidamente)
true -- Reversões (o meio reverte uma vez que chegar ao seu objetivo)
)
local function activateAction()
-- Se o objeto estiver transicionando, evite que ele seja transicionado novamente
if inTween == true then
return
end
-- Calcular novo CFrame para posição e rotação do objeto
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE, 0)
local rotatedCFrame = CFrame.Angles(math.rad(TWEEN_ROT_ANGLES), 0, 0)
offsetCFrame = offsetCFrame:ToWorldSpace(rotatedCFrame)
local newCFrame = partToTween.CFrame:ToWorldSpace(offsetCFrame)
-- Crie um pré-adolescente e jogue-o
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Na conclusão da pré-adolescência, faça com que o objeto seja clicável novamente
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)
Escala
Mudar o tamanho de objetos no jogo também pode mostrar que um jogador interagiu com eles.Por instância, pickups como pacotes de saúde ou gemas podem encolher quando tocados.Para dimensionar peças, altere o objetivo de meia-idade para um novo Vector3 do tamanho desejado.
-- Ajustar a escala de uma peça quando ela é tocada, então destruí-la
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Variáveis personalizáveis
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Variáveis de transição
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tempo
Enum.EasingStyle.Exponential, -- Estilo de Facilitação
Enum.EasingDirection.Out -- Direção de Facilitação
)
local function onPartTouch(otherPart)
-- Se o objeto estiver transicionando, evite que ele seja transicionado novamente
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Prevenir mais colisões no objeto desde que ele foi coletado
partToScale.CanCollide = false
-- Crie um pré-adolescente e jogue-o
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Na conclusão da pré-adolescência, destrua o Objeto
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)
Mudança de cor
Peças podem transicionar cores por meio de transições com valores de Color3.Por instância, inimigos ou objetos destrutíveis podem exibir cores para dar feedback de que foram atingidos ou clicados.
-- Alterar a cor de um Objetoao clicar e destruí-lo após 3 cliques
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Variáveis personalizáveis
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Variáveis de transição
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tempo
Enum.EasingStyle.Exponential, -- Estilo de Facilitação
Enum.EasingDirection.InOut, -- Direção de Facilitação
0, -- RepeatCount (quando menos que zero o pré-adolescente irá circular indefinidamente)
true -- Reversões (o meio reverte uma vez que chegar ao seu objetivo)
)
local function activateAction()
-- Se o objeto estiver transicionando, evite que ele seja transicionado novamente
if inTween == true then
return
end
-- Crie um pré-adolescente e jogue-o
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Na conclusão da pré-adolescência, faça com que o objeto seja clicável novamente
tweenObject.Completed:Connect(function()
inTween = false
-- Contagem de acertos incremental
hitCount += 1
-- Após 3 acertos, destrua o Objeto
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)
Embora este script use uma parte normal para alterar a cor, também é possível usá-lo em MeshParts com uma textura aplicada.MeshParts são frequentemente importados modelos 3D, em vez de peças construídas diretamente no Roblox Studio.
Se você estiver trabalhando com uma MeshPart totalmente texturizada, aconselhamos o seguindo:
Use uma SpecialMesh em vez de uma MeshPart. Isso porque uma textura de MeshPart substitui a cor sendo tingida pelo script.
Altere o script para modificar o VertexColor do SpecialMesh em vez da propriedade de cor.
Exemplo de projeto
Veja todos os exemplos de script neste local não protegido por cópia. Obtenha todos os scripts para modificar também.