FE Animation GUI
Key RequiredUniversal

FE Animation GUI

Universal Scriptddorredoreddorredore 1.3K views 2.1K executesUpdated Mar 27, 2026
Unrated
00
Lua Script•348 lines (10542 chars)
--// Simple Mobile-Friendly Animation GUI
--// Put this LocalScript in StarterPlayerScripts or StarterGui

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")

--========================
-- EDIT HERE
--========================
local animationId = "rbxassetid://0000000000" -- put your animation id here
local animationSpeed = 1 -- 0.1 = super slow, 1 = normal, 5 = fast, etc.
local buttonName = "Play Animation"
local guiTitle = "Animation GUI"
local smallButtonText = "Open"
--========================

local playing = false
local animationTrack
local currentAnimation

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "AnimationGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = player:WaitForChild("PlayerGui")

local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 280, 0, 210)
mainFrame.Position = UDim2.new(0.5, -140, 0.5, -105)
mainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Parent = screenGui

local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 12)
mainCorner.Parent = mainFrame

local titleBar = Instance.new("TextLabel")
titleBar.Size = UDim2.new(1, 0, 0, 35)
titleBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
titleBar.BorderSizePixel = 0
titleBar.Text = guiTitle
titleBar.TextColor3 = Color3.fromRGB(255, 255, 255)
titleBar.TextScaled = true
titleBar.Font = Enum.Font.GothamBold
titleBar.Parent = mainFrame

local titleCorner = Instance.new("UICorner")
titleCorner.CornerRadius = UDim.new(0, 12)
titleCorner.Parent = titleBar

local hideButton = Instance.new("TextButton")
hideButton.Size = UDim2.new(0, 60, 0, 25)
hideButton.Position = UDim2.new(1, -65, 0, 5)
hideButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
hideButton.Text = "Hide"
hideButton.TextColor3 = Color3.fromRGB(255, 255, 255)
hideButton.TextScaled = true
hideButton.Font = Enum.Font.Gotham
hideButton.BorderSizePixel = 0
hideButton.Parent = mainFrame

local hideCorner = Instance.new("UICorner")
hideCorner.CornerRadius = UDim.new(0, 8)
hideCorner.Parent = hideButton

local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.new(0, 25, 0, 25)
closeButton.Position = UDim2.new(1, -30, 0, 5)
closeButton.BackgroundColor3 = Color3.fromRGB(170, 50, 50)
closeButton.Text = "X"
closeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
closeButton.TextScaled = true
closeButton.Font = Enum.Font.GothamBold
closeButton.BorderSizePixel = 0
closeButton.Parent = mainFrame

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 8)
closeCorner.Parent = closeButton

local animLabel = Instance.new("TextLabel")
animLabel.Size = UDim2.new(0, 90, 0, 25)
animLabel.Position = UDim2.new(0, 10, 0, 50)
animLabel.BackgroundTransparency = 1
animLabel.Text = "Anim ID:"
animLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
animLabel.TextScaled = true
animLabel.Font = Enum.Font.Gotham
animLabel.Parent = mainFrame

local animBox = Instance.new("TextBox")
animBox.Size = UDim2.new(0, 170, 0, 25)
animBox.Position = UDim2.new(0, 95, 0, 50)
animBox.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
animBox.Text = animationId
animBox.TextColor3 = Color3.fromRGB(255, 255, 255)
animBox.TextScaled = true
animBox.Font = Enum.Font.Gotham
animBox.BorderSizePixel = 0
animBox.ClearTextOnFocus = false
animBox.Parent = mainFrame

local animCorner = Instance.new("UICorner")
animCorner.CornerRadius = UDim.new(0, 8)
animCorner.Parent = animBox

local speedLabel = Instance.new("TextLabel")
speedLabel.Size = UDim2.new(0, 90, 0, 25)
speedLabel.Position = UDim2.new(0, 10, 0, 85)
speedLabel.BackgroundTransparency = 1
speedLabel.Text = "Speed:"
speedLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
speedLabel.TextScaled = true
speedLabel.Font = Enum.Font.Gotham
speedLabel.Parent = mainFrame

local speedBox = Instance.new("TextBox")
speedBox.Size = UDim2.new(0, 170, 0, 25)
speedBox.Position = UDim2.new(0, 95, 0, 85)
speedBox.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
speedBox.Text = tostring(animationSpeed)
speedBox.TextColor3 = Color3.fromRGB(255, 255, 255)
speedBox.TextScaled = true
speedBox.Font = Enum.Font.Gotham
speedBox.BorderSizePixel = 0
speedBox.ClearTextOnFocus = false
speedBox.Parent = mainFrame

local speedCorner = Instance.new("UICorner")
speedCorner.CornerRadius = UDim.new(0, 8)
speedCorner.Parent = speedBox

local nameLabel = Instance.new("TextLabel")
nameLabel.Size = UDim2.new(0, 90, 0, 25)
nameLabel.Position = UDim2.new(0, 10, 0, 120)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = "Button Name:"
nameLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
nameLabel.TextScaled = true
nameLabel.Font = Enum.Font.Gotham
nameLabel.Parent = mainFrame

local nameBox = Instance.new("TextBox")
nameBox.Size = UDim2.new(0, 170, 0, 25)
nameBox.Position = UDim2.new(0, 95, 0, 120)
nameBox.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
nameBox.Text = buttonName
nameBox.TextColor3 = Color3.fromRGB(255, 255, 255)
nameBox.TextScaled = true
nameBox.Font = Enum.Font.Gotham
nameBox.BorderSizePixel = 0
nameBox.ClearTextOnFocus = false
nameBox.Parent = mainFrame

local nameCorner = Instance.new("UICorner")
nameCorner.CornerRadius = UDim.new(0, 8)
nameCorner.Parent = nameBox

local applyButton = Instance.new("TextButton")
applyButton.Size = UDim2.new(0, 250, 0, 28)
applyButton.Position = UDim2.new(0, 15, 0, 155)
applyButton.BackgroundColor3 = Color3.fromRGB(50, 120, 50)
applyButton.Text = "Apply Changes"
applyButton.TextColor3 = Color3.fromRGB(255, 255, 255)
applyButton.TextScaled = true
applyButton.Font = Enum.Font.GothamBold
applyButton.BorderSizePixel = 0
applyButton.Parent = mainFrame

local applyCorner = Instance.new("UICorner")
applyCorner.CornerRadius = UDim.new(0, 10)
applyCorner.Parent = applyButton

local playButton = Instance.new("TextButton")
playButton.Size = UDim2.new(0, 250, 0, 28)
playButton.Position = UDim2.new(0, 15, 0, 187)
playButton.BackgroundColor3 = Color3.fromRGB(50, 120, 50)
playButton.Text = buttonName
playButton.TextColor3 = Color3.fromRGB(255, 255, 255)
playButton.TextScaled = true
playButton.Font = Enum.Font.GothamBold
playButton.BorderSizePixel = 0
playButton.Parent = mainFrame

local playCorner = Instance.new("UICorner")
playCorner.CornerRadius = UDim.new(0, 10)
playCorner.Parent = playButton

local smallButton = Instance.new("TextButton")
smallButton.Size = UDim2.new(0, 70, 0, 30)
smallButton.Position = UDim2.new(0, 10, 0.5, -15)
smallButton.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
smallButton.Text = smallButtonText
smallButton.TextColor3 = Color3.fromRGB(255, 255, 255)
smallButton.TextScaled = true
smallButton.Font = Enum.Font.GothamBold
smallButton.BorderSizePixel = 0
smallButton.Visible = false
smallButton.Active = true
smallButton.Parent = screenGui

local smallCorner = Instance.new("UICorner")
smallCorner.CornerRadius = UDim.new(0, 10)
smallCorner.Parent = smallButton

local function updateCharacter()
	character = player.Character or player.CharacterAdded:Wait()
	humanoid = character:WaitForChild("Humanoid")
end

player.CharacterAdded:Connect(function()
	task.wait(1)
	updateCharacter()
	if playing then
		task.wait(0.2)
		-- restart animation after respawn if it was on
		local newAnimId = animBox.Text
		local newSpeed = tonumber(speedBox.Text) or animationSpeed
		local animation = Instance.new("Animation")
		animation.AnimationId = newAnimId
		currentAnimation = animation

		local animator = humanoid:FindFirstChildOfClass("Animator") or Instance.new("Animator")
		animator.Parent = humanoid

		animationTrack = animator:LoadAnimation(animation)
		animationTrack.Looped = true
		animationTrack:Play()
		animationTrack:AdjustSpeed(newSpeed)
	end
end)

local function stopAnimation()
	playing = false
	if animationTrack then
		animationTrack:Stop()
		animationTrack:Destroy()
		animationTrack = nil
	end
end

local function startAnimation()
	if playing then return end
	playing = true

	local newAnimId = animBox.Text
	local newSpeed = tonumber(speedBox.Text) or animationSpeed

	local animator = humanoid:FindFirstChildOfClass("Animator")
	if not animator then
		animator = Instance.new("Animator")
		animator.Parent = humanoid
	end

	local animation = Instance.new("Animation")
	animation.AnimationId = newAnimId
	currentAnimation = animation

	animationTrack = animator:LoadAnimation(animation)
	animationTrack.Looped = true
	animationTrack:Play()
	animationTrack:AdjustSpeed(newSpeed)
end

applyButton.MouseButton1Click:Connect(function()
	if nameBox.Text ~= "" then
		playButton.Text = nameBox.Text
	else
		playButton.Text = buttonName
	end
end)

playButton.MouseButton1Click:Connect(function()
	if playing then
		stopAnimation()
		playButton.BackgroundColor3 = Color3.fromRGB(50, 120, 50)
		playButton.Text = nameBox.Text ~= "" and nameBox.Text or buttonName
	else
		playButton.Text = "Stop"
		playButton.BackgroundColor3 = Color3.fromRGB(150, 60, 60)
		startAnimation()
	end
end)

hideButton.MouseButton1Click:Connect(function()
	mainFrame.Visible = false
	smallButton.Visible = true
end)

smallButton.MouseButton1Click:Connect(function()
	mainFrame.Visible = true
	smallButton.Visible = false
end)

closeButton.MouseButton1Click:Connect(function()
	stopAnimation()
	screenGui:Destroy()
end)

-- Draggable for mobile and PC
local function makeDraggable(guiObject)
	local dragging = false
	local dragInput
	local dragStart
	local startPos

	guiObject.InputBegan:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1
			or input.UserInputType == Enum.UserInputType.Touch then
			dragging = true
			dragStart = input.Position
			startPos = guiObject.Position

			input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End then
					dragging = false
				end
			end)
		end
	end)

	guiObject.InputChanged:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseMovement
			or input.UserInputType == Enum.UserInputType.Touch then
			dragInput = input
		end
	end)

	UserInputService.InputChanged:Connect(function(input)
		if input == dragInput and dragging then
			local delta = input.Position - dragStart
			guiObject.Position = UDim2.new(
				startPos.X.Scale,
				startPos.X.Offset + delta.X,
				startPos.Y.Scale,
				startPos.Y.Offset + delta.Y
			)
		end
	end)
end

makeDraggable(mainFrame)
makeDraggable(smallButton)

Features & Information

-- Simple Mobile-Friendly Animation GUI -- Open Source & Free to Use -- Made by Me -- Easily play, stop, and customize animations on mobile or PC -- Fully draggable GUI with adjustable speed and button name -- Credits: Keep this notice if you share or modify

Community Comments (1)

freerobuxlord123freerobuxlord123Mar 30, 2026

ts buns

More Scripts for Universal Scripts