ROBLOX Camera Lock-on вызывает вращение - PullRequest
0 голосов
/ 02 июля 2018

Я создал скрипт блокировки для 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 голосов
/ 10 июля 2018

Камера вращается, когда она находится над головой сущности, возможно, потому что вы пытаетесь достичь точки, над которой вы находитесь вертикально.

Чтобы помочь вам вообразить это, представьте себе, пытаетесь ли вы использовать компас, который указывает на северный полюс, чтобы достичь северного полюса, и вы можете идти только в том направлении, куда указывает компас. Как только вы приблизитесь к северному полюсу, компас укажет на него. Но если вы продолжаете идти вперед, то в конечном итоге вы пройдете НАД северным полюсом и пройдете через него. Тогда компас будет вращаться и указывать назад, так что вы будете идти назад. В конце концов вы снова обойдете его, и компас снова перевернется.

В конце концов вы достигнете точки, в которой вы будете очень быстро возвращаться туда и обратно, но вы никогда не получите КВИТ напрямую. Поскольку компас всегда указывает на северный полюс, вы увидите, что компас вращается очень быстро, потому что вы перемещаетесь вокруг него очень быстро, очень близко к нему, но никогда точно не над головой. Чем ближе вы подходите, тем меньше движения оказывают большее влияние на направление компаса.

Я думаю, что это то, что происходит, когда камера фиксируется на цели, и игрок идет вперед. Как только вы попадаете на ВЕРХНЮЮ цель, камера пытается продолжать указывать на цель, но, так как вы очень близки, вы перемещаетесь назад и вперед по точке на цель, на которую указывает камера, и она поворачивается вокруг, пытаясь указать к этому.

Может быть, вы могли бы вставить чек следующим образом:

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

Расстояние зависит от вас, но общая идея заключается в том, что если вы приблизитесь к цели достаточно близко, чтобы камера начала вращаться вокруг нее, она перестанет отслеживать и будет нормально функционировать. В качестве альтернативы, если проблема возникает только когда ВЫШЕ против цели, попробуйте включить другое условие, чтобы проверить, находится ли игрок непосредственно над целью, и затем прекратить отслеживание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...