【问题标题】:Roblox - Rotating a ModelRoblox - 旋转模型
【发布时间】:2016-06-19 14:39:02
【问题描述】:

我正在开发一款允许放置一些建筑物的游戏 程序旋转。

我发现以下我正在尝试合并的轮换代码:

function TransformModel(objects, center, new, recurse)
    for _,object in pairs(objects) do
        if object:IsA("BasePart") then
            object.CFrame =     new:toWorldSpace(center:toObjectSpace(object.CFrame))
        end
        if recurse then
            TransformModel(object:GetChildren(), center, new, true)
        end
    end
end

在我的建筑放置脚本中调用如下:

local center = model:GetModelCFrame()
TransformModel( model:GetChildren(), center, center * CFrame.Angles(0,math.rad(45),0), true )

所以代码在某种程度上起作用了...模型确实会旋转,但只是在它跳到空中并随意降落之后才最终稳定在旋转的位置,尽管它与物理后的精确 45 度旋转相去甚远在空中跳跃并落下的效果。

我不太确定,但我怀疑有一种更好的方法可以在模型平滑旋转的情况下完成此操作。任何帮助将不胜感激。

谢谢, 安迪

【问题讨论】:

    标签: roblox


    【解决方案1】:

    GetModelCFrame 是一个已弃用的方法。建议使用PrimaryPartGetPrimaryPartCFrameSetPrimaryPartCFrame。设置主要部分指定模型中的特定部分作为您可以通过其 CFrame 移动的基础。这种方法的好处在于,如果您使用这些方法转换模型的 PrimaryPart,则模型中的所有其他部分也将转换以保持它们与 PrimaryPart 的偏移。

    为了放置建筑物和道具,通常希望这部分是底部的平坦部分,代表建筑物的足迹。

    例如,考虑以下模型:

    在这种情况下,制作主要部分的最佳部分将是底部的部分。如果您的模型没有包含在几何中的零件,那么您可以制作一个不可见的并且可以碰撞假零件作为基础。在下面的例子中,有一个树模型没有很宽的基础,但我们要确保足迹足够大,不会与附近的其他对象重叠:

    在这种情况下,黄色部分应在运行时完全透明。

    因此,就按照您想要的方式实际定位模型的代码而言,您所要做的就是使用新的 CFrame 调用 SetPrimaryPartCFrame。 TransformModel 函数简单地变成:

    local function TransformModel(model, newCFrame)
        model:SetPrimaryPartCFrame(newCFrame)
    end 
    

    当你想调用这个函数说将模型旋转 45 度时:

    local model = game.Workspace.Model
    model.PrimaryPart = model.Base
    local rotatedCFrame = model:GetPrimaryPartCFrame() * CFrame.Angles(0, math.rad(45), 0)
    
    TransformModel(model, rotatedCFrame)
    

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • 我已经更新了我的答案,希望能更清楚、更有用。
    • 请注意,如果您尝试旋转其中包含humanoid 的模型,则需要将模型的PrimaryPart 设置为HumandoidRootPart;模型的其他物理部分将无法工作。
    • 好答案,我在看到这个几个小时后在网上搜索。谢谢。
    【解决方案2】:

    我相信我找到了适合我的问题的答案,但我不确定这是否是解决问题的最佳方法。我创建了一个额外的部分作为模型的确切宽度和高度的基础,然后模型位于新基础部分的顶部并且基础被锚定。这似乎已经解决了 - 有没有更好的方法?

    【讨论】:

      猜你喜欢
      • 2016-10-30
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      相关资源
      最近更新 更多