我为ROBLOX制作了一个锁定脚本,该脚本锁定特定敌人,但从肩膀冲浪的角度跟随玩家。
问题是,当接近被锁定的敌人或实体时,他们会跳到他们的头上或上方。导致玩家仅向前移动时会旋转。
我知道问题出在运动系统,而运动系统正朝着相机所要看的方向移动。但是,最好是在敌人上方移动时进行无缝过渡。
-- Declare variables
local player = game.Players.LocalPlayer
local camera = game.Workspace.CurrentCamera
local runService = game:GetService("RunService")
local dummy = workspace.Dummy
local target = workspace.Lock
camera.CameraType = Enum.CameraType.Scriptable
camera.CameraSubject = target
local angle = 0
-- Wait a frame for camera to load
wait()
-- Update camera on RenderStepped to get smooth motion
runService.RenderStepped:connect(function()
local character = player.Character
-- Check if character and torso exist (in case character is dead)
if character and character.Torso and character.Head then
local torso = character.Torso
local head = character.Head
local ZPosition = Vector3.new(head.CFrame.X, head.CFrame.Y + 2, head.CFrame.Z)
local ZCFrame = CFrame.new(head.CFrame.X, 1, head.CFrame.Z)
local XPosition = Vector3.new(head.CFrame.X + 5, head.CFrame.Y + 2, head.CFrame.Z)
camera.CFrame = CFrame.new(ZPosition, target.Position) * CFrame.new(2, 0, 7)
camera.Focus = CFrame.new(target.Position)
end
end)
答案 0 :(得分:1)
镜头在实体头部上方旋转时,可能是因为您试图到达垂直在其上方的位置。
要想像一下,请想象一下是否要使用指向北极的指南针到达北极,并且只能沿着指南针所指的方向行走。一旦您接近北极,指南针便会指向北极。但是,如果您继续向前走,最终您将越过北极并越过北极。然后,指南针会旋转并指向后方,因此您会向后走。最终,您将再次越过它,指南针将再次旋转。
最终,您会很快地在其上来回移动,但从来没有直接将QUITE直接移到其上。由于指南针始终指向北极,因此您会看到指南针旋转得非常快,这是因为您在非常接近它的位置非常快地围绕它旋转,但从未完全在其上方。距离越近,运动越小,对指南针的方向影响越大。
我认为这就是发生的情况,相机被锁定在目标上,而玩家正在向前走。一旦获得目标的最佳位置,相机便会尝试一直指向目标,但是由于距离太近,您会在相机所指向的目标上来回移动,然后鞭打试图指向
也许您可以插入这样的支票:
if (distanceToTarget.X >= 1 meter) then
camera.pointAtTarget(); --Point at the locked on target as your script would
else
camera.pointNormally(); --Point straight ahead as it normally would if there was no locked target
end
距离由您决定,但一般的想法是,如果您距离目标足够近,相机开始向四周鞭打,它将停止跟踪并正常工作。或者,如果仅在目标上方时才出现问题,则尝试包括其他条件以检查玩家是否直接在目标上方,然后停止跟踪。