Roblox 鼠标摄像头旋转问题

开发论坛没有帮到我,所以我在这里提问。

我正在尝试制作一个《五夜后宫》游戏,并制作自定义相机脚本,但却没有面朝正确的方向。这是为什么?

视频: https://doy2mn9upadnk.cloudfront.net/uploads/default/original/4X/0/2/4/024cca4de534dcfc084a944d3c2a13abf5382e0c.mp4

代码


RunService.RenderStepped:Connect(function()
    if PlayerCharacter:WaitForChild("Player"):WaitForChild("isNightGuard").Value and not game.ReplicatedStorage:FindFirstChild("GameData"):FindFirstChild("inCams").Value then
        Mouse.TargetFilter = game.Workspace.NightguardPosition
        CurrentCamera.CFrame = CFrame.new(game.Workspace.NightguardPosition.CFrame.Position)
        CurrentCamera.CFrame = CFrame.new(CurrentCamera.CFrame.Position, Mouse.UnitRay.Direction * 10)
    end
end)

NightguardPosition 部分位于正确位置和方向。 我尝试了许多相机脚本的变化,但它们都有相同的结果,请帮帮我吗?

原文链接 https://stackoverflow.com/questions/70885483

点赞
stackoverflow用户18249718
stackoverflow用户18249718

问题在于,对于 CFrame.new(Vector3: position, Vector3: lookAt) 构造函数,第二个 Vector3 表示世界空间中 CFrame 将指向的目标,并不是一个方向向量,除非 position 是原点(0,0,0)。为了解决这个问题,必须将 NightguardPosition.Position 添加到鼠标指向的世界位置中,因为在设置 lookAt 时,鼠标的单位光线就像是一个偏移量。

修改后的代码如下,其中包含一些注释(对 RenderStepped 的更改是建议性的,不需要围绕其进行构建!):

CurrentCamera.CameraSubject = workspace.NightguardPosition --// 默认情况下,CameraSubject 是 LocalPlayer 的 Humanoid,会导致一些奇怪的运动。一定要在摄像机退出时将其还原。

--// 除非在其他位置已进行更改,否则这是一个小的性能优化。总之,最好只在必要时才进行设置,不要在循环行为中设置。
Mouse.TargetFilter = game.Workspace.NightguardPosition
local nightGuardPos = workspace.NightguardPosition.Position

RunService.RenderStepped:Connect(function()
    --// CurrentCamera.CFrame = CFrame.new(game.Workspace.NightguardPosition.CFrame.Position)
    --// 可以去掉,因为这与获取 NightguardPosition 的 Position 是相同的。

    CurrentCamera.CFrame = CFrame.new(nightGuardPos, nightGuardPos + Mouse.UnitRay.Direction * 10)
end)
2022-02-19 05:35:20