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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:54:29