Partes Animadas

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Los jugadores pueden obtener sugerencias sobre si sus acciones están haciendo algo con animaciones. Esto puede ser un temblor de árbol cuando se golpea, o un mascota saltando con alegría cuando se alimenta. En este caso, le mostraremos cómo hacer un botón que se mueve cuando el jugador lo hace.

Tweening con Animaciones

Una manera de animar objetos es usar tweens. Un tween, corto para in-between, es el proceso de cambiar un valor de inicio a un valor de finalización en un cierto período de tiempo. Los tweens se pueden usar para cambiar propiedades como la posición, color o rotación.

Configuración del proyecto

Para este proyecto, un tween moverá un objeto desde una posición de inicio a una posición de destino.

  1. Determine qué parte animará. En el ejemplo a continuación, 1 es el botón y 2 es la pared.

  2. En la parte que se herramienta de movimiento, agregue un ClickDetector y un script llamado TweenMove. No renombre el ClickDetector.

  3. Abra el script TweenMove. Luego, copie y pegue el script a continuación.


    -- Twistea una parte hacia atrás y hacia delante en función de un eje elegido
    -- El botón tiene un estado de on/off que mueve la parte hacia adelante o hacia atrás
    local TweenService = game:GetService("TweenService")
    local button = script.Parent
    local clickDetector = button:FindFirstChildWhichIsA("ClickDetector")
    local buttonState = -1 -- Determina la dirección de los botones; -1 significa que presionará en, 1 significa que saldrá
    local inTween = false
    -- variables personalizables
    local TWEEN_TIME = 0.15
    local TWEEN_MOVE_DISTANCE = 1.5
    -- variables de tween
    local buttonTweenInfo = TweenInfo.new(
    TWEEN_TIME, -- Tiempo
    Enum.EasingStyle.Quad, -- Estilo de alivio
    Enum.EasingDirection.Out -- EasingDirection
    )
    local function buttonPress()
    -- Si el botón está tweening, evita que se use de nuevo
    if inTween == true then
    return
    end
    -- Calcular el nuevo CFrame para la posición del botón
    local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
    local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
    -- Crea un tween yéndolo a jugar
    local tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})
    tweenButton:Play()
    inTween = true
    -- Al completar el tween, hacer que el botón sea usable de nuevo
    tweenButton.Completed:Connect(function()
    inTween = false
    -- Invertir el estado del botón
    buttonState *= -1
    end)
    end
    clickDetector.MouseClick:Connect(buttonPress)
  4. Prueba y haz clic en el objeto. Mientras pruebas, puede que notes que el objeto se mueve en la dirección o distancia incorrecta. Eso se puede personalizar en la siguiente sección.

Dirección incorrecta; necesita ajustarse
Se mueve correctamente; no se necesita ajuste

Ajustando el Tweet de Movimiento

Con el script agregado, puede personalizarla para que sea adecuada a las necesidades de su juego. El botón se puede tuernear para mover en direcciones como hacia delante y hacia volver, o hacia arriba y hacia abajo.

Cambio de posición

Recuerda, los adolescentes transitan de un valor de inicio a un valor de destino. Este script usa CFrame 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 CFrame utilizando X, Y y Z. En este ejemplo, el botón se mueve en relación con su eje Y.


-- Calcular el nuevo CFrame para la posición del botón
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Para tener el botón mover en una dirección diferente simplemente reemplace una de las coordenadas deseadas con la línea: TWEEN_MOVE_DISTANCE * buttonState. Establezca todos los demás coordenadas a 0.

Por ejemplo, esta línea lo moverá en relación con su eje X en su lugar.


-- Calcular el nuevo CFrame para la posición del botón
local offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Tiempo de Tweening y Distancia

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.

Intente 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 el botón se mueve en studs.

Ajustar otras propiedades

La mayoría de las propiedades con un tipo de datos numérico se pueden dibujar. Esta sección incluye algunas propiedades comunes, como la rotación, que se pueden usar para llevar más comentarios del jugador a tu juego. Ten en cuenta que también puedes dibujar múltiples propiedades a la vez.

Para obtener una lista completa de propiedades, consulte la página TweenService de la API.

Girando

Para la rotación, combina la escala y los CFrame en lugar de usar solo Vector3. Las escalas de rotación se pueden usar para hacer que las criaturas se muevan cuando se acaricia o las monedas se mueven cuando se recogen.

En el siguiente ejemplo de script, la posición y la rotación de la criatura se sincronizan cuando se hace clic para mostrar lo feliz que es cuando se le acaricia.

El código a continuación girará 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 rebotar
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 tween
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tiempo
Enum.EasingStyle.Quad, -- Estilo de alivio
Enum.EasingDirection.Out, -- EasingDirection
1, -- RepeatCount (cuando menos de cero, el tween se repetición indefinidamente)
true -- Reverses (tween se revertirá una vez que alcance su objetivo)
)
local function activateAction()
-- Si el objeto está envejeciendo, evita que se envejezca nuevamente
if inTween == true then
return
end
-- Calcular el nuevo CFrame 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)
-- Crea un tween yéndolo a jugar
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Al completar el tween, hacer que el objeto sea clickable de nuevo
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)

Dimensiones

Cambiar el tamaño de los objetos en el juego también puede mostrar que un jugador interactuó con ellos. Por instancia, los agarres como paquetes de salud o gemas pueden encogerse cuando se tocan. Para escalar partes, cambie el objetivo de tamaño a un nuevo Vector3 del tamaño deseado.


-- Ajusta el tamaño de una parte cuando se toca, luego destruyelo
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 tween
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tiempo
Enum.EasingStyle.Exponential, -- Estilo de alivio
Enum.EasingDirection.Out -- EasingDirection
)
local function onPartTouch(otherPart)
-- Si el objeto está envejeciendo, evita que se envejezca nuevamente
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Evita las colisiones adicionales en el objeto al que se le ha recogido
partToScale.CanCollide = false
-- Crea un tween yéndolo a jugar
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Al completar el ciclo, destruir el objeto
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)

Cambio de color

Las partes pueden cambiar los colores al tener un tinte con los valores de Color3. Por instancia, los enemigos o los objetos destructibles pueden darle colores de flash para dar una retroalimentación de que han sido golpeados o han sido clicados.


-- Ajusta el color de un objeto al hacer clic y destruyelo 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 tween
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tiempo
Enum.EasingStyle.Exponential, -- Estilo de alivio
Enum.EasingDirection.InOut, -- EasingDirection
0, -- RepeatCount (cuando menos de cero, el tween se repetición indefinidamente)
true -- Reverses (tween se revertirá una vez que alcance su objetivo)
)
local function activateAction()
-- Si el objeto está envejeciendo, evita que se envejezca nuevamente
if inTween == true then
return
end
-- Crea un tween yéndolo a jugar
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Al completar el tween, hacer que el objeto sea clickable de nuevo
tweenObject.Completed:Connect(function()
inTween = false
-- Aumentar el recuento 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 usarlo en MeshPart con una textura aplicada. Las MeshPart a menudo se importan modelos 3D, en lugar de partes que se construyen directamente en Roblox Studio.

Si está trabajando con una MeshPart totalmente texturizada, le recomendamos lo siguiendo:

  1. Usa un SpecialMesh en lugar de un MeshPart. Esto se debe a que la textura de un MeshPart sobrescribió el color que se tintea por el script.

  2. Cambia el script para modificar el Color del VertexColor en lugar de la propiedad Color.

Ejemplo de proyecto

Ver todos los ejemplos de script en este lugar no bloqueado. Obtenga todos los scripts para modificar también.

Incluye scripts para la rotación, escalado y cambio de color de los niños.

>