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.
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 ClickDetector y un script llamado TweenMove. No renombre el ClickDetector.
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áslocal TweenService = game:GetService("TweenService")local button = script.Parentlocal 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 personalizableslocal TWEEN_TIME = 0.15local TWEEN_MOVE_DISTANCE = 1.5-- variables de tweenlocal buttonTweenInfo = TweenInfo.new(TWEEN_TIME, -- TiempoEnum.EasingStyle.Quad, -- Estilo de alivioEnum.EasingDirection.Out -- EasingDirection)local function buttonPress()-- Si el botón está tweening, evita que se use de nuevoif inTween == true thenreturnend-- Calcular el nuevo CFrame para la posición del botónlocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)-- Crea un tween yéndolo a jugarlocal tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})tweenButton:Play()inTween = true-- Al completar el tween, hacer que el botón sea usable de nuevotweenButton.Completed:Connect(function()inTween = false-- Invertir el estado del botónbuttonState *= -1end)endclickDetector.MouseClick:Connect(buttonPress)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.
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ónlocal 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ónlocal 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:
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.
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. > |