OBJ ANIM CONTROLLER
Key RequiredUniversal

OBJ ANIM CONTROLLER

Universal Scriptzyablicevalexeizyablicevalexei 4.2K views 355 executesUpdated Jun 30, 2026
2.5/ 5(2 votes)
1150% Positive
Lua Script•185 lines (7896 chars)
-- Full Physical Motion Mirroring (9 Limbs: Knees & Elbows Included) ---

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")

local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()

-- Таблица для хранения привязанных объектов (добавлено 4 новых сустава)
local AttachedObjects = {
    Torso         = {Part = nil, R15 = "UpperTorso",    R6 = "Torso"},
    -- Верхние части рук (Плечи)
    LeftArm       = {Part = nil, R15 = "LeftUpperArm",  R6 = "Left Arm"},
    RightArm      = {Part = nil, R15 = "RightUpperArm", R6 = "Right Arm"},
    -- Нижние части рук (Предплечья / Локти)
    LeftLowerArm  = {Part = nil, R15 = "LeftLowerArm",   R6 = "Left Arm"},
    RightLowerArm = {Part = nil, R15 = "RightLowerArm",  R6 = "Right Arm"},
    -- Верхние части ног (Бёдра)
    LeftLeg       = {Part = nil, R15 = "LeftUpperLeg",  R6 = "Left Leg"},
    RightLeg      = {Part = nil, R15 = "RightUpperLeg", R6 = "Right Leg"},
    -- Нижние части ног (Голени / Колени)
    LeftLowerLeg  = {Part = nil, R15 = "LeftLowerLeg",   R6 = "Left Leg"},
    RightLowerLeg = {Part = nil, R15 = "RightLowerLeg",  R6 = "Right Leg"}
}

-- Ссылка на GUI для обновления текста статуса
local StatusLabels = {}

-- Функция поиска правильной кости персонажа в зависимости от R15 / R6
local function GetCharacterLimb(limbData)
    if Character:FindFirstChild("Humanoid") and Character.Humanoid.RigType == Enum.HumanoidRigType.R6 then
        return Character:FindFirstChild(limbData.R6)
    else
        return Character:FindFirstChild(limbData.R15)
    end
end

--- ========================================== ---
---        ФУНКЦИЯ СОЗДАНИЯ ИНСТРУМЕНТОВ       ---
--- ========================================== ---

local function CreateLimbTool(toolName, keyName, color)
    local Tool = Instance.new("Tool")
    Tool.Name = toolName
    Tool.RequiresHandle = false
    
    Tool.Equipped:Connect(function()
        local conn
        conn = Mouse.Button1Down:Connect(function()
            local target = Mouse.Target
            -- Проверяем, что это незафиксированный блок и не часть нашего персонажа
            if target and target:IsA("BasePart") and not target.Anchored and not target:IsDescendantOf(Character) then
                
                -- Если этот блок уже привязан к другой части тела, освобождаем его там
                for k, data in pairs(AttachedObjects) do
                    if data.Part == target then
                        AttachedObjects[k].Part = nil
                        if StatusLabels[k] then
                            StatusLabels[k].Text = k .. ": пусто"
                            StatusLabels[k].TextColor3 = Color3.fromRGB(150, 150, 150)
                        end
                    end
                end

                -- Привязываем блок
                AttachedObjects[keyName].Part = target
                target.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
                
                -- Эффект вспышки при выборе
                local origTrans = target.Transparency
                target.Transparency = 0.5
                task.delay(0.2, function() target.Transparency = origTrans end)
                
                -- Обновляем текст в GUI
                if StatusLabels[keyName] then
                    StatusLabels[keyName].Text = toolName .. " -> " .. target.Name
                    StatusLabels[keyName].TextColor3 = color
                end
                
                print(toolName .. " успешно подключен к: " .. target.Name)
            end
        end)
        
        Tool.Unequipped:Connect(function()
            if conn then conn:Disconnect() end
        end)
    end)
    
    Tool.Parent = LocalPlayer:WaitForChild("Backpack")
end

-- Создаем 9 инструментов для полной детализации робота
CreateLimbTool("Робот: Тело", "Torso", Color3.fromRGB(255, 255, 255))

CreateLimbTool("Робот: Л. Плечо", "LeftArm", Color3.fromRGB(0, 150, 255))
CreateLimbTool("Робот: Л. Локоть", "LeftLowerArm", Color3.fromRGB(0, 100, 200))

CreateLimbTool("Робот: П. Плечо", "RightArm", Color3.fromRGB(0, 255, 150))
CreateLimbTool("Робот: П. Локоть", "RightLowerArm", Color3.fromRGB(0, 200, 100))

CreateLimbTool("Робот: Л. Бедро", "LeftLeg", Color3.fromRGB(255, 150, 0))
CreateLimbTool("Робот: Л. Колено", "LeftLowerLeg", Color3.fromRGB(200, 100, 0))

CreateLimbTool("Робот: П. Бедро", "RightLeg", Color3.fromRGB(255, 50, 250))
CreateLimbTool("Робот: П. Колено", "RightLowerLeg", Color3.fromRGB(200, 30, 200))


--- ========================================== ---
---         ОСНОВНОЙ ЦИКЛ СИНХРОНИЗАЦИИ        ---
--- ========================================== ---

RunService.Heartbeat:Connect(function()
    for keyName, data in pairs(AttachedObjects) do
        local obj = data.Part
        if obj and obj.Parent then
            local limb = GetCharacterLimb(data)
            if limb then
                -- Берём текущую позицию блока на земле, чтобы избежать левитации
                local _, _, _, r00, r01, r02, r10, r11, r12, r20, r21, r22 = limb.CFrame:components()
                local limbRotation = CFrame.new(0, 0, 0, r00, r01, r02, r10, r11, r12, r20, r21, r22)
                
                -- Применяем только вращение, позиция регулируется физикой Roblox
                obj.CFrame = CFrame.new(obj.Position) * limbRotation
                obj.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
            else
                -- Автосброс при потере конечности
                AttachedObjects[keyName].Part = nil
                if StatusLabels[keyName] then
                    StatusLabels[keyName].Text = keyName .. ": пусто"
                    StatusLabels[keyName].TextColor3 = Color3.fromRGB(150, 150, 150)
                end
            end
        end
    end
end)


--- ========================================== ---
---             СОЗДАНИЕ ИНТЕРФЕЙСА            ---
--- ========================================== ---

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "RobotAnatomyMirror_GUI"
ScreenGui.ResetOnSpawn = false
if gethui then ScreenGui.Parent = gethui() else ScreenGui.Parent = CoreGui end

local MainPanel = Instance.new("Frame")
MainPanel.Size = UDim2.new(0, 320, 0, 185) -- Увеличено под 9 строк мониторинга
MainPanel.Position = UDim2.new(0.5, 0, 1, -240)
MainPanel.AnchorPoint = Vector2.new(0.5, 0)
MainPanel.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
MainPanel.BorderSizePixel = 2
MainPanel.Parent = ScreenGui

local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, 8)
Corner.Parent = MainPanel

local function CreateStatusLabel(text, posY)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -20, 0, 15)
    lbl.Position = UDim2.new(0, 10, 0, posY)
    lbl.Text = text
    lbl.TextColor3 = Color3.fromRGB(150, 150, 150)
    lbl.BackgroundTransparency = 1
    lbl.Font = Enum.Font.SourceSansBold
    lbl.TextSize = 12
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = MainPanel
    return lbl
end

StatusLabels["Torso"]         = CreateStatusLabel("Корпус: пусто", 10)
StatusLabels["LeftArm"]       = CreateStatusLabel("Л. Плечо: пусто", 27)
StatusLabels["LeftLowerArm"]  = CreateStatusLabel("Л. Локоть: пусто", 44)
StatusLabels["RightArm"]      = CreateStatusLabel("П. Плечо: пусто", 61)
StatusLabels["RightLowerArm"] = CreateStatusLabel("П. Локоть: пусто", 78)
StatusLabels["LeftLeg"]       = CreateStatusLabel("Л. Бедро: пусто", 95)
StatusLabels["LeftLowerLeg"]  = CreateStatusLabel("Л. Колено: пусто", 112)
StatusLabels["RightLeg"]      = CreateStatusLabel("П. Бедро: пусто", 129)
StatusLabels["RightLowerLeg"] = CreateStatusLabel("П. Колено: пусто", 146)

print("9-ти суставный физический аниматор запущен! Полная поддержка коленей и локтей.")

Features & Information

you can control objects and make them like a player moving
#obj#block#control#animations#player

Community Comments (2)

AkaD4haAkaD4haOct 2, 2026

W script

AkaD4haAkaD4haOct 2, 2026

is this visual or its ss cuz too good

More Scripts for Universal Scripts