You need to enable JavaScript to run this app. Lua新手求助:点击触发的门脚本完全无法正常运行
优惠活动
大模型
产品
解决方案
定价
更多

Lua新手求助:点击触发的门脚本完全无法正常运行

排查出的核心运行错误与逻辑偏差
  • 枚举大小写不匹配:Roblox 的枚举值严格区分大小写,原代码写的 Enum.Easingstyle 是无效标识符,访问时会直接触发脚本报错,导致所有逻辑完全失效,正确的枚举写法为 Enum.EasingStyle。
  • TweenInfo 参数错位:原代码构造 TweenInfo 时,将本应拆分为独立参数的「缓动类型、缓动方向」合并为单个参数传入,后续的重复次数、反向标记、延迟时间全部位置偏移,最终生成的 Tween 配置完全不符合预期。
  • 交互逻辑与需求不匹配:原代码的点击回调没有做门的状态判断,无论门当前处于开/关状态,每次点击都会直接播放开门动画、等待2秒后自动播放关门动画,根本实现不了「点击一次开门、再次点击回到原始位置」的切换效果。
  • 硬编码坐标易失配:原代码手动写死了关门的坐标值,和门在场景里的实际初始位置很容易出现偏差,直接读取门的初始 CFrame 作为关门目标值,能避免手动输坐标带来的位置错位问题。
修正后可直接运行的完整代码
local Door = script.Parent
-- 存储门的初始位置作为关门目标坐标,无需手动硬编码
local initialCFrame = Door.CFrame
local TweenService = game:GetService("TweenService")
-- 修正枚举大小写,按正确顺序传入所有TweenInfo参数
local TweenStyle = TweenInfo.new(0.5, Enum.EasingStyle.Elastic, Enum.EasingDirection.Out, 0, false, 0)

-- 开门坐标沿用代码中原定义的位置
local DoorOpen = {CFrame = CFrame.new(-54.66, 9.5, -9.056)}
local DoorClose = {CFrame = initialCFrame}

local OpenTween = TweenService:Create(Door, TweenStyle, DoorOpen)
local CloseTween = TweenService:Create(Door, TweenStyle, DoorClose)

-- 状态标记,用来判断门当前的开关状态
local isOpen = false
script.Parent.ClickDetector.MouseClick:Connect(function()
    -- 切换状态:开着就触发关门动画,关着就触发开门动画
    if isOpen then
        CloseTween:Play()
        isOpen = false
    else
        OpenTween:Play()
        isOpen = true
    end
end)

注意:如果运行时出现两个动画同时播放的冲突,可以在每次调用 Play() 前,先对正在播放的 Tween 调用 Cancel() 方法,重置动画进度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 23:27:03