我的对象出现了故障,因为我让它移动的方式



我正在和朋友制作一款游戏,我们要让一个物体在房子周围移动,并随机到达一个点。问题是,如果它在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不是最好的,但我真的不知道如何保持它在地面上。(RayCasting ?)

我必须使用渐变因为它是一个对象它不能有人形

这是一段视频。在这个视频中,你可以看到物体摇晃,然后当它到达它的点时,它就会"死"下来,就像我所说的那样。

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

要解决这个问题,要么补间的速度应该基于角色到航路点的距离,要么应该使用其他方法来移动角色,比如人形(参见下面的其他解决方案)。

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

一种解决方案是在渐变时禁用物理效果,尽管这很糟糕,并且会在以后引起其他问题。另一种方法是使用不同的方法,避免修改Y轴。还是那句话,最好还是使用人形动画,但如果没有这个选项,请参考沿一个轴进行补间。

相关内容

最新更新