通过射线投射创建的圆柱体没有朝向预期的方向

编程语言 2026-07-10

我在全局脚本里有这段代码,由本地脚本触发,它会在射线的起点到终点之间创建一条直线,基本上能准确地追踪它的轨迹:

trazo.OnServerEvent:Connect(function(usuario, iniciovisible, impacto)
    local largo = (iniciovisible - impacto).Magnitude

    local linea = Instance.new("Part")
    linea.Parent = workspace.Residuos
    linea.Anchored = true
    linea.CanCollide = false
    linea.CFrame = CFrame.lookAt(iniciovisible, impacto) * CFrame.new(0, 0, -largo/2)
    linea.Size = Vector3.new(.1, .1, largo)
    linea.Transparency = .2

        for count = 0, 3 do
        linea.Size += Vector3.new(.1, .1, .1)
        linea.Transparency += .2

        wait(.1)

    end

    linea:Destroy()

end)

当部件的形状没有改变时,它工作得非常完美,保持为立方体形状,边缘粗糙。

然而,当我想把它改成圆柱体时,圆柱体的前端朝向一侧,并且位于射线轨迹的中间,看起来像是一种外壳。

我已经尝试通过让它的CFrame只保持一个分量不变来调试,但没有作用:

linea.CFrame = CFrame.lookAt(iniciovisible, Vector3.new(inicioinvisible, inicioinvisible, impacto) * CFrame.new(0, 0, -largo/2)

我也尝试把Size属性的所有分量改成长度值,但也没有效果:

linea.Size = Vector3.new(.1, largo, .1)

我已经想不出办法了。欢迎任何帮助。

解决方案

圆柱体把Y 轴当作长度,而不是Z 轴。你的圆柱是在Z 轴上缩放的,所以位置会错位。除非我理解有误,或者我读错了你的意思,那将是我的答案(不要完全相信我的话。如果我没理解对,可能还需要你提供更多信息,但我大致理解了你在说什么)。
下面也给出一个修复的片段来解决这个问题!

linea.Shape = Enum.PartType.Cylinder
linea.CFrame = CFrame.lookat(iniciovisible, impacto)
     * CFrame.Angles(0,0,math.rad(90))
     * CFrame.new(0,0,-largo/2)

linea.Size = Vector3.new(.1, largo, .1)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章