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

基于TweenPosition的Roblox公告系统无动画且不显示消息问题

Roblox侧边弹出公告系统修复方案

核心问题分析

  • 错误操作StarterGui而非PlayerGui:StarterGui是界面模板,仅在玩家加入时复制到Player.PlayerGui,直接修改StarterGui内的元素不会在玩家实际界面生效。
  • 字符串处理未生效:message:gsub(...)不会直接修改原字符串,必须将返回值赋值给新变量才能得到去除前缀后的内容。
  • 动画无初始起点:若GUI初始位置已处于目标位置,Tween动画不会触发,需先将GUI置于屏幕外作为动画起点。
  • 未确保GUI可见性:若GUI默认隐藏,需先设置Visible = true才能显示内容与动画。

修复后的完整代码

-- 管理员列表
local admins = {
    ["adminnamehere"] = true
}
-- 获取StarterGui中的公告模板
local announcementTemplate = game.StarterGui.ScreenGui.Frame

game.Players.PlayerAdded:Connect(function(player)
    -- 等待玩家PlayerGui加载完成
    local playerGui = player:WaitForChild("PlayerGui")
    -- 克隆模板到玩家的PlayerGui,确保每个玩家有独立界面
    local playerAnnouncementGUI = announcementTemplate:Clone()
    playerAnnouncementGUI.Parent = playerGui.ScreenGui -- 若ScreenGui未自动复制,需先克隆整个ScreenGui
    
    -- 初始化GUI到屏幕左侧外
    playerAnnouncementGUI.Position = UDim2.new(-1, 275, 0, 109)
    playerAnnouncementGUI.Visible = true

    player.Chatted:Connect(function(message)
        if admins[player.Name] then
            local words = string.split(message, " ")
            local command = string.lower(words[1])
            if command == "!msg" then
                -- 执行弹出动画
                playerAnnouncementGUI:TweenPosition(
                    UDim2.new(0, 275, 0, 109),
                    Enum.EasingDirection.Out,
                    Enum.EasingStyle.Quart,
                    0.5, -- 缩短动画时长,提升流畅感
                    false
                )
                -- 移除!msg前缀及后续多余空格
                local announcementContent = message:gsub("^" .. words[1] .. "%s*", "")
                -- 设置发送者名称
                playerAnnouncementGUI.SenderName.Text = player.Name
                -- 设置公告内容
                playerAnnouncementGUI.Message.Text = announcementContent

                -- 可选:5秒后自动收回公告
                task.wait(5)
                playerAnnouncementGUI:TweenPosition(
                    UDim2.new(-1, 275, 0, 109),
                    Enum.EasingDirection.In,
                    Enum.EasingStyle.Quart,
                    0.5,
                    false
                )
            end
        end
    end)
end)

额外注意事项

  • 确认StarterGui内的ScreenGui、Frame层级正确,SenderName和Message是Frame的直接子控件。
  • 动画时长建议设为0.5秒,原5秒时长会导致动画过于拖沓,不符合公告的即时性需求。
  • 自动收回逻辑可根据需求调整停留时间,或改为手动关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:54:42