Los jugadores pueden obtener comentarios sobre si sus acciones están haciendo algo con las animaciones.Esto puede ser un árbol temblando cuando se golpea, o una mascota alegremente rebotando cuando se alimenta.En este caso, te mostraremos cómo hacer un botón que se mueva cuando el jugador lo haga clic.
Tween con animaciones
Una forma de animar objetos es usando adolescentes.Un preadolescente , abreviado como entre medias, es el proceso de cambiar un valor inicial a un valor final en un cierto período de tiempo.Los adolescentes se pueden usar para cambiar propiedades como la posición, el color o la rotación.
Configuración del proyecto
Para este proyecto, un preadolescente moverá un objeto desde una posición de partida a una posición de destino.
Determine qué parte animará. En el ejemplo a continuación, 1 es el botón y 2 es la pared.
En la parte que se herramienta de movimiento, agregue un Detector de clics y un script llamado TweenMove. No renombre el Detector de clics.
Abre el script TweenMove. Luego, copia y pega el script a continuación.
-- Adolescentes devuelve una parte de ida y vuelta en función de un eje elegido-- El botón tiene un estado de encendido/apagado que mueve la pieza hacia adelante o hacia atráslocal TweenService = game:GetService("TweenService")local button = script.Parentlocal clickDetector = button:FindFirstChildWhichIsA("ClickDetector")local buttonState = -1 -- Determina la dirección del botón; -1 significa que presionará hacia adentro, 1 significa que saldrálocal inTween = false-- Variables personalizableslocal TWEEN_TIME = 0.15local TWEEN_MOVE_DISTANCE = 1.5-- Variables de preadolescentelocal buttonTweenInfo = TweenInfo.new(TWEEN_TIME, -- TiempoEnum.EasingStyle.Quad, -- Estilo de facilitaciónEnum.EasingDirection.Out -- Dirección de alivio)local function buttonPress()-- Si el botón está en transición, evite que se use de nuevoif inTween == true thenreturnend-- Calcular nuevo marco C para la posición del botónlocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)-- Crear un preadolescente y jugarlolocal tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})tweenButton:Play()inTween = true-- Al completar el preadolescente, vuelva a hacer que el botón sea utilizabletweenButton.Completed:Connect(function()inTween = false-- Invertir el estado del botónbuttonState *= -1end)endclickDetector.MouseClick:Connect(buttonPress)Prueba y haz clic en el objeto.Durante las pruebas, puede notar que el objeto se mueve en la dirección o distancia incorrecta.Esto se puede personalizar en la siguiente sección.


Ajustar el intermediación/interpolación de movimientode movimiento
Con el script agregado, puedes personalizarlo para satisfacer las necesidades de tu juego.El botón se puede desplazar para moverse en direcciones como hacia adelante y hacia volver, o hacia arriba y hacia abajo.
Cambiar posición
Recuerde, los adolescentes pasan de un valor de partida a un valor de objetivo.Este script usa CFrames para mover el botón en una dirección relativa a su posición actual.Esa dirección se controla en Línea 28 del script.
En esa línea, se crea un nuevo marco utilizando las coordenadas X, Y y Z. En este ejemplo, el botón se mueve en relación con su eje Y.
-- Calcular nuevo marco C para la posición del botónlocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Para que el botón se mueva en una dirección diferente , simplemente reemplace una de las coordenadas deseadas con la línea: TWEEN_MOVE_DISTANCE * buttonState.Establece todos los demás coordinados a 0.
Por ejemplo, esta línea lo moverá en relación con su eje X en lugar de eso.
-- Calcular nuevo marco C para la posición del botónlocal offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Tiempo y distancia de preadolescente
El script incluye las siguientes variables que afectan el movimiento del intermediación/interpolación de movimiento.Los nombres capitalizados como TWEEN_TIME se escriben específicamente para que este script se modifique.
Prueba cambiar el valor de una variable a continuación:
- Línea 11 - TWEEN_TIME : El tiempo en segundos que tarda en ocurrir un tween.
- Línea 12 - TWEEN_MOVE_DISTANCE : La distancia que se mueve el botón en studs.
Cambiar otras propiedades
La mayoría de las propiedades con un tipo de dato numérico se pueden intermediar.Esta sección incluye algunas propiedades comunes, como la rotación, que se pueden usar para incluir más comentarios de los jugadores en tu juego.Tenga en cuenta, también puede cambiar múltiples propiedades a la vez.
Para obtener una lista completa de propiedades, consulte la página de API TweenService.
Rotación
Para la rotación, combina tweening y CFrames en lugar de usar solo Vector3.Los adolescentes de rotación se pueden usar para hacer que las criaturas se muevan cuando se acarician, o que las monedas giren cuando se recogen.
En el siguiente ejemplo de script, la posición y la rotación de la criatura se acercan cuando se hace clic para mostrar lo feliz que es al ser acariciada.
El código siguiente rotará un objeto en función del número de grados en TWEEN_ROT_ANGLES .
-- Usa tween para hacer que el objeto gire hacia arriba y rebote
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Variables personalizables
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Variables de preadolescente
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tiempo
Enum.EasingStyle.Quad, -- Estilo de facilitación
Enum.EasingDirection.Out, -- Dirección de alivio
1, -- RepeatCount (cuando menos de cero el preadolescente se repetirá indefinidamente)
true -- Reversos (tween se revertirá una vez que alcance su objetivo)
)
local function activateAction()
-- Si el objeto está madurando, evita que se madure nuevamente
if inTween == true then
return
end
-- Calcular nuevo marco C para la posición y rotación del 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)
-- Crear un preadolescente y jugarlo
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Al completar el preadolescente, vuelva a hacer que el objeto sea clicable
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)
Escala
Cambiar el tamaño de los objetos en el juego también puede mostrar que un jugador interactuó con ellos.Por instancia, las recogidas como paquetes de salud o gemas pueden encogerse cuando se tocan.Para escalar piezas, cambia el objetivo de tween a un nuevo Vector3 del tamaño deseado.
-- Medio entre la escala de una parte cuando se toca, luego destrúyela
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Variables personalizables
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Variables de preadolescente
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tiempo
Enum.EasingStyle.Exponential, -- Estilo de facilitación
Enum.EasingDirection.Out -- Dirección de alivio
)
local function onPartTouch(otherPart)
-- Si el objeto está madurando, evita que se madure nuevamente
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Evitar futuras colisiones en el objeto ya que se ha recogido
partToScale.CanCollide = false
-- Crear un preadolescente y jugarlo
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Al completar el preadolescente, destruir el objeto
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)
Cambio de color
Las piezas pueden cambiar de color transicionando con valores de Color3.Por instancia, los enemigos o los objetos destructibles pueden mostrar colores para dar retroalimentación de que han sido golpeados o clicados.
-- Medio tonalizar el color de un objeto al hacer clic y destruirlo después de 3 clics
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Variables personalizables
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Variables de preadolescente
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tiempo
Enum.EasingStyle.Exponential, -- Estilo de facilitación
Enum.EasingDirection.InOut, -- Dirección de alivio
0, -- RepeatCount (cuando menos de cero el preadolescente se repetirá indefinidamente)
true -- Reversos (tween se revertirá una vez que alcance su objetivo)
)
local function activateAction()
-- Si el objeto está madurando, evita que se madure nuevamente
if inTween == true then
return
end
-- Crear un preadolescente y jugarlo
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Al completar el preadolescente, vuelva a hacer que el objeto sea clicable
tweenObject.Completed:Connect(function()
inTween = false
-- Aumento del número de golpes
hitCount += 1
-- Después de 3 golpes, destruye el objeto
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)
Aunque este script usa una parte normal para cambiar el color, también es posible usar esto en MeshParts con una textura aplicada.Las piezas de malla a menudo se importan modelos 3D, en lugar de piezas que se construyen directamente en Roblox Studio.
Si estás trabajando con una MeshPart totalmente texturada, te aconsejamos lo siguiendo:
Usa un SpecialMesh en lugar de un MeshPart. Esto es porque la textura de un MeshPart anula el color que se tintea por el script.
Cambia el script para modificar el color de vértice de la malla especial en lugar de la propiedad de color.
Muestra de proyecto
Vea todos los ejemplos de scripts en este lugar sin copia protegida. Obtenga todos los scripts para modificar también.