ROBLOX相机锁定导致旋转

时间:2018-07-02 03:58:36

标签: lua camera roblox

我为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)

MP4/GIF

1 个答案:

答案 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

距离由您决定,但一般的想法是,如果您距离目标足够近,相机开始向四周鞭打,它将停止跟踪并正常工作。或者,如果仅在目标上方时才出现问题,则尝试包括其他条件以检查玩家是否直接在目标上方,然后停止跟踪。