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
相关产品推荐
相关产品推荐

