在Roblox中如何从一端缩放圆柱并向后移动(香烟制作需求)
Roblox香烟道具缩放问题修复
问题分析
你当前的代码在让香烟X轴尺寸递减时,同时沿着LookVector反向移动Part,却出现了前端缩放的问题,核心原因:
- Part默认
AnchorPoint为(0.5, 0.5, 0.5)(中心位置),缩放X轴时会从中心向两端收缩,配合后续移动CFrame的操作,最终表现为前端向内收缩的效果。 - 循环内重复创建Tween并依赖
wait(0.1),容易出现时序误差,导致缩放与移动动作不同步。
修复方案
1. 调整Part锚点
先将香烟Part的AnchorPoint设置为Vector3.new(0, 0.5, 0.5),这样X轴缩放会以Part的后端(靠近玩家握持的一端)为基准,前端保持位置不变,完美模拟香烟燃烧变短的效果。
2. 优化代码逻辑
调整锚点后无需再手动移动CFrame,直接缩放X轴即可。同时优化Tween逻辑,避免循环内的时序误差:
方案一:单Tween完成整个缩放过程(推荐)
local TweenService = game:GetService("TweenService") local bit = -- 替换为你的香烟Part引用 -- 设置锚点 bit.AnchorPoint = Vector3.new(0, 0.5, 0.5) local initialSizeX = bit.Size.X -- 总时长按初始长度调整,每0.1单位长度对应0.1秒 local tweenInfo = TweenInfo.new(initialSizeX * 1, Enum.EasingStyle.Linear) local goal = { Size = Vector3.new(0, bit.Size.Y, bit.Size.Z) } local tween = TweenService:Create(bit, tweenInfo, goal) tween:Play() tween.Completed:Wait()
方案二:分步循环逻辑(需分步执行其他操作时使用)
local TweenService = game:GetService("TweenService") local bit = -- 替换为你的香烟Part引用 bit.AnchorPoint = Vector3.new(0, 0.5, 0.5) local currentSizeX = bit.Size.X while currentSizeX > 0 do currentSizeX = math.max(currentSizeX - 0.1, 0) local tweenInfo = TweenInfo.new(0.1) local goal = { Size = Vector3.new(currentSizeX, bit.Size.Y, bit.Size.Z) } local tween = TweenService:Create(bit, tweenInfo, goal) tween:Play() tween.Completed:Wait() -- 用Tween完成事件替代wait,避免时序误差 end
额外说明
- 作为工具道具,需确保Part父级为Tool的Handle,若锚点调整影响握持位置,可配合Handle的CFrame进行微调。
- 测试时可开启Part的锚点显示,直观观察缩放基准点与收缩方向是否符合预期。
内容的提问来源于stack exchange,提问作者Genius G
相关产品推荐
相关产品推荐

