Roblox沉船游戏开发报错Argument 1 missing or nil,求船只旋转方案
解决Roblox沉船游戏船只旋转的「Argument 1 missing or nil」错误
错误原因
你脚本里的X:TranslateBy(...)传参逻辑有问题——SetPrimaryPartCFrame()是无返回值的方法,执行后会返回nil,相当于给TranslateBy()传了空值,这直接触发了「Argument 1 missing or nil」报错。而且实现船只旋转根本不需要结合TranslateBy,直接修改模型主部件的CFrame就能完成。
修正后的基础旋转脚本
下面是能实现船只按固定角度间隔旋转的代码:
wait(10) local ship = script.Parent -- 提前获取主部件,减少重复API调用 local primaryPart = ship.PrimaryPart -- 循环控制旋转次数,这里的8到100可按需调整 for i = 8, 100 do -- 在当前主部件的CFrame基础上叠加旋转角度 local newCFrame = primaryPart.CFrame * CFrame.Angles(-0.2, 0, 0.1) ship:SetPrimaryPartCFrame(newCFrame) wait(5) end
进阶:平滑旋转(用TweenService)
如果想要更自然的沉船摆动/旋转效果,推荐用TweenService做平滑动画,避免生硬的角度跳变:
wait(10) local TweenService = game:GetService("TweenService") local ship = script.Parent local primaryPart = ship.PrimaryPart -- 定义旋转目标:在原角度基础上叠加指定旋转量(这里用math.rad把角度转成弧度) local targetCFrame = primaryPart.CFrame * CFrame.Angles(-math.rad(18), 0, math.rad(10)) -- 动画配置:时长5秒,缓动类型选适合沉船的自然效果 local tweenInfo = TweenInfo.new( 5, -- 动画时长(秒) Enum.EasingStyle.Sine, -- 缓动样式,Sine适合模拟自然摆动 Enum.EasingDirection.InOut -- 缓动方向 ) -- 创建并播放动画 local tween = TweenService:Create(primaryPart, tweenInfo, {CFrame = targetCFrame}) tween:Play() -- 如果需要循环旋转,可监听动画完成后继续叠加角度 tween.Completed:Connect(function() local nextTarget = primaryPart.CFrame * CFrame.Angles(-math.rad(5), 0, math.rad(3)) local nextTween = TweenService:Create(primaryPart, tweenInfo, {CFrame = nextTarget}) nextTween:Play() end)
注意事项
- 确保你的模型已经设置了
PrimaryPart,否则PrimaryPart会是nil,导致新的报错。 CFrame.Angles()的参数是弧度,如果习惯用角度,记得用math.rad(角度值)转换,比如math.rad(90)对应90度。
内容的提问来源于stack exchange,提问作者Milan Maricic
相关产品推荐
相关产品推荐

