You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Roblox动画归属群组且优先级最高却不播放问题求助

Roblox R6角色动画无法播放问题排查

问题详情

  • 动画与游戏归属同一群组
  • 动画基于R6骨骼创建,游戏内所有玩家均使用R6角色
  • 动画优先级已设置为最高等级(Action4)
  • 动画ID正确且已发布至Roblox平台
  • 控制台明确输出动画正在播放,但玩家角色无对应动作反馈

相关代码

local Players = game:GetService("Players")
local selectedPlayer = game:GetService('ReplicatedStorage'):WaitForChild("Events"):WaitForChild("SelectedPlayer")
local tool = script.Parent
local blade = tool:WaitForChild('Blade')
local slashAnim = tool:WaitForChild('SlashAnim')
local debounce = false
local playersHit = {}
local COOLDOWN = 1

tool.Activated:Connect(function()
    if debounce then
        return
    end

    local humanoid : Humanoid = tool.Parent:FindFirstChild("Humanoid")
    if not humanoid then
        warn("Humanoid not found in tool.Parent:", tool.Parent.Name)
        return
    end

    local animator : Animator = humanoid:FindFirstChild("Animator") or Instance.new("Animator", humanoid)
    local animTrack : AnimationTrack = animator:LoadAnimation(slashAnim)
    --animTrack:AdjustWeight(1)
    
    print(animator:GetPlayingAnimationTracks())

    repeat task.wait() until animTrack.Length > 0
    animTrack:Play()
    print("Animaion ID: ", animTrack.Animation.AnimationId)
    print("Animation Playing:", animTrack.IsPlaying)
    print("Animation Priority:", animTrack.Priority)

    debounce = true
    animTrack.Stopped:Wait() -- Wait for animation to complete
    debounce = false
end)

blade.Touched:Connect(function(hit)
    local humanoid = hit.Parent:FindFirstChild('Humanoid')

    if not humanoid or hit.Parent == tool.Parent or playersHit[hit.Parent] or not debounce then
        return
    end

    selectedPlayer:FireServer(humanoid)

    -- Prevents overloading server when player has activated tool
    playersHit[hit.Parent] = true 
    task.wait(COOLDOWN)
    playersHit[hit.Parent] = nil
end)

控制台输出

{
    [1] = ToolNoneAnim,
    [2] = Animation1,
    [3] = SlashAnim
}  -  Client - WeaponScript:25

Animaion ID:  rbxassetid://107803674678292  -  Client - WeaponScript:29
Animation Playing: true  -  Client - WeaponScript:30
Animation Priority: Enum.AnimationPriority.Action4 -  Client - WeaponScript:31

排查与修复方案

1. 避免重复加载动画轨道

当前代码每次激活工具都会创建新的AnimationTrack实例,容易导致轨道堆积或冲突。建议在工具装备时提前加载动画,复用同一轨道:

local animTrack : AnimationTrack = nil

-- 工具装备时初始化动画轨道
tool.Equipped:Connect(function()
    local humanoid = tool.Parent:FindFirstChild("Humanoid")
    if not humanoid then return end
    
    local animator = humanoid:FindFirstChild("Animator") or Instance.new("Animator", humanoid)
    animTrack = animator:LoadAnimation(slashAnim)
    animTrack.Priority = Enum.AnimationPriority.Action4
    animTrack:AdjustWeight(1)
end)

tool.Activated:Connect(function()
    if debounce or not animTrack then return end

    -- 播放前停止可能冲突的动画
    for _, track in ipairs(animTrack.Animator:GetPlayingAnimationTracks()) do
        if track.Name ~= slashAnim.Name then
            track:Stop()
        end
    end

    animTrack:Play()
    print("Animation Playing:", animTrack.IsPlaying)

    debounce = true
    animTrack.Stopped:Wait()
    debounce = false
end)

2. 明确设置动画权重

取消代码中animTrack:AdjustWeight(1)的注释,确保动画权重设为最大值1,避免被其他低权重动画覆盖。

3. 检查动画骨骼绑定

在Roblox动画编辑器中重新预览动画,确认所有关键帧都正确绑定到R6角色的对应骨骼(如RightArm、Torso等),没有缺失或错误的骨骼引用。

4. 处理冲突动画

控制台显示有其他动画(ToolNoneAnim、Animation1)正在播放,即使当前动画优先级最高,也可能被同优先级动画干扰。可以在播放SlashAnim前停止这些冲突动画,或调整它们的优先级低于Action4。

5. 验证动画权限

前往Roblox创作者后台,确认动画的权限设置为「所属群组可使用」,而非仅创作者个人可见。

内容的提问来源于stack exchange,提问作者boombuster2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:34:59