If the character goes backwards, it starts twitching, and it looks even worse for other players, what can this be related to? One person told me that it may be related to the mismatch of physics and rendering fps, but even if you replace RenderStepped with Heartbeat, the character will still twitch, but already in other players, and the alternative in the form of AlignOrientation does not look very and updates slowly, occurs with some delay, please suggest a solution
Camera module code:
local RunService, UserInput, Players = game:GetService("RunService"), game:GetService("UserInputService"), game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Rad = math.rad
local MinXLimit, MaxXLimit = -math.huge, math.huge
local MinYLimit, MaxYLimit = -80, 80
local CameraAngle = Vector2.zero
local MouseBehavior = Enum.MouseBehavior.LockCenter
local TransparentAccessoryTypes = {
Enum.AccessoryType.Hat,
Enum.AccessoryType.Hair,
Enum.AccessoryType.Face,
Enum.AccessoryType.Eyebrow,
Enum.AccessoryType.Eyelash,
Enum.AccessoryType.Unknown,
Enum.AccessoryType.Front,
Enum.AccessoryType.Neck,
Enum.AccessoryType.Back
}
local Camera = workspace.CurrentCamera
local AdvancedCameraModule = {}
local function UpdateCharacter()
local Character = LocalPlayer.Character
local Root = Character.PrimaryPart
for i, object in pairs(Character:GetDescendants()) do
if (object:IsA("BasePart") and (object.Name == "Head" or object.Name == "UpperTorso" or (object.Parent.ClassName == "Accessory" and table.find(TransparentAccessoryTypes, object.Parent.AccessoryType)))) or object:IsA("Decal") then
object.Transparency = 1
end
end
Root.CFrame = CFrame.new(Root.Position) * CFrame.Angles(0, -Rad(CameraAngle.X), 0)
end
function AdvancedCameraModule.Update(deltaTime: number)
local Character = LocalPlayer.Character
if not Character then
return
end
local Head = Character:FindFirstChild("Head")
if not Head then
return
end
UserInput.MouseBehavior = MouseBehavior
local MouseDelta = UserInput:GetMouseDelta()
CameraAngle = Vector2.new(
math.clamp(CameraAngle.X + MouseDelta.X, MinXLimit, MaxXLimit),
math.clamp(CameraAngle.Y + MouseDelta.Y, MinYLimit, MaxYLimit)
)
Camera.CFrame = CFrame.new(Head.Position + Head.CFrame.LookVector * .55 + Head.CFrame.UpVector * .25) * CFrame.Angles(0, -Rad(CameraAngle.X), 0) * CFrame.Angles(-Rad(CameraAngle.Y), 0, 0)
UpdateCharacter()
end
local function Init()
RunService:BindToRenderStep("CameraControl", Enum.RenderPriority.Camera.Value + 1, AdvancedCameraModule.Update)
end
return AdvancedCameraModule, Init()