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

如何将模型传送到数组内的随机Box中?代码问题排查

问题排查与解决方法

1. 语法错误:多余的end

你的代码在onMouseClick函数结束后多了一个额外的end,这会直接导致脚本语法报错,无法正常运行,必须删除这个多余的end。

2. 路径错误:Box文件夹引用不匹配

根据你描述的Workspace结构,boxes文件夹位于Workspace根目录,但代码里用HS.Boxes(HS = script.Parent即脚本所在文件夹)去引用,这会导致找不到目标Box对象,进而无法获取有效CFrame完成传送。需要修正路径为game.Workspace.boxes(注意Roblox对象名称区分大小写,确保和实际文件夹名称一致)。

3. 传送位置问题:直接使用Box的CFrame会导致模型重叠

你当前直接将模型传送到Box的CFrame位置,这会让模型和Box完全重合,而非处于Box内部。需要基于Box的位置和大小,计算出内部的合适位置再传送。

4. 全局变量风险:boxArray未声明为局部变量

未加local的全局变量可能和其他脚本产生冲突,建议改为局部变量。


修正后的代码

local clickDetector = game.Workspace.Paper.ClickDetector

-- 修正Box文件夹路径,直接引用Workspace根目录下的boxes
local boxFolder = game.Workspace.boxes

-- 改为局部变量,存储Box对象而非提前存CFrame(支持Box位置动态变化)
local boxArray = {
    boxFolder.Box,
    boxFolder.Box10,
    boxFolder.Box3,
    boxFolder.Box4,
    boxFolder.Box5,
    boxFolder.Box6,
    boxFolder.Box7,
    boxFolder.Box8,
    boxFolder.Box9
}

function onMouseClick()
    local baby = game.Workspace.FinalBaby
    -- 随机选中一个Box对象
    local targetBox = boxArray[math.random(1, #boxArray)]
    
    -- 计算Box内部位置:基于Box和模型的大小偏移,避免穿模
    -- 可根据Box实际尺寸调整Vector3内的偏移值
    local innerPosition = targetBox.Position + Vector3.new(0, targetBox.Size.Y/2 + baby.PrimaryPart.Size.Y/2, 0)
    local innerCFrame = CFrame.new(innerPosition)
    
    baby:SetPrimaryPartCFrame(innerCFrame)
end

-- 绑定点击事件(已删除多余end)
clickDetector.MouseClick:Connect(onMouseClick)

额外注意事项

  • 确保FinalBaby模型已正确设置PrimaryPart,否则SetPrimaryPartCFrame会报错。
  • 若Box有旋转角度,可改用targetBox.CFrame:ToWorldSpace(CFrame.new(0, targetBox.Size.Y/2 + baby.PrimaryPart.Size.Y/2, 0))来计算内部位置,适配Box的朝向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:43:15