由于我移动它的方式,我的对象出现故障

My object is glitching out because of the way I make it move

我正在和我的朋友一起开发一款游戏,我们正在让一个物体在房子周围移动并到达随机点。问题是,如果它在 X 轴上向上移动然后向下移动然后它开始摇晃并表现得很奇怪。

        path:ComputeAsync(character.Position, workspace:WaitForChild("ModelsMain").SleepBag.SLEEP.Position)
        waypoints = path:GetWaypoints()
        for _, wp in pairs(waypoints) do
            local tweenInfo = TweenInfo.new(.6, Enum.EasingStyle.Linear)
            local tween = TweenService:Create(character, tweenInfo, {CFrame = CFrame.new(wp.Position.X, character.CFrame.Y, wp.Position.Z)})

            tween:Play()
            tween.Completed:Wait(2)

            --character.CFrame = CFrame.new(wp.Position.X, wp.Position.Y, wp.Position.Z)
        end
        
        wait(5)
        
        local baggy = game:GetService("ServerScriptService").moneybag:Clone()
        baggy.Parent = workspace:WaitForChild("Moneys")
        baggy.Position = character.Position

我知道 character.CFrame.Y 不是最好的,但我真的不知道如何保持它在地面上。 (光线投射?)

我必须使用 Tween,因为它是一个对象,不能有类人动物。

这里是a video。在此视频中,您可以看到物体摇晃然后当它到达它的点时它会掉落“死”,正如我所说。

这个脚本的一个问题是补间完成的时间不一致。目前,它被设置为需要 0.6 秒才能移动到每个航路点。问题是没有考虑 waypoints 之间的距离。如果距离很远,角色会移动得非常快。离得近,角色移动会慢

要解决此问题,补间的速度应基于角色到路径点的距离,或者应使用其他方法移动角色,例如类人动物(请参阅下面的其他解决方案)。

导致错误的另一个问题实际上可能是 character.CFrame.Y 的使用。这可能会干扰物理系统,从而导致与运动相关的非常奇怪的错误。有许多不同的方法可以解决这个问题。

一种解决方案是在补间时禁用物理,尽管这很麻烦并且以后会导致其他问题。另一种方法是使用不同的方法来避免修改 Y 轴。再一次,最好使用类人动物,但是如果那不是一个选项,请参阅 tweening an object along one axis.