FE Gun Kit Crosshair is on slightly bottom in firstperson camera

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? Keep it simple and clear!

I want crosshair to get actually centered on firstperson.

  1. What is the issue? Include screenshots / videos if possible!

Crosshair is placed on slightly bottom instead of center, But not in thirdperson or shift locked.

This issue is not happening on non-viewmodel version of FE Gun Kit.

Issue only happens on actual game, Not Roblox Studio.

I’m suspecting this as conflict between new roblox HUD and kit, Since it was not happening before new HUD in i remember.

  1. What solutions have you tried so far? Did you look for solutions on the Developer Hub?

I looked for solution on forum, Checking and adjusting the GUI and Crosshair’s property, Trying other viewmodel FE Gun Kit version.

I’m using Al’s FE Gun Kit.

Video:

renderMouse function in GunScript_Local, Which is causing the issue.

function renderMouse()
	local delta = UserInputService:GetMouseDelta() / Module.ScopeSensitive
	
	if Scoping and UserInputService.MouseEnabled and UserInputService.KeyboardEnabled then --For pc version
	    GUI.Scope.Position = UDim2.new(0, scope.p.x + (knockback.p.y * 1000), 0, scope.p.y + (knockback.p.x * 200))
	    local offset = GUI.Scope.AbsoluteSize.x * 0.5
	    scope.t = Vector3.new(Mouse.x - offset - delta.x, Mouse.y - offset - delta.y, 0)
	    oldPosition = Vector2.new(Mouse.x, Mouse.y)
	elseif Scoping and UserInputService.TouchEnabled and not UserInputService.MouseEnabled and not UserInputService.KeyboardEnabled then --For mobile version, but in first-person view
	    GUI.Scope.Position = UDim2.new(0, scope.p.x + (knockback.p.y * 1000), 0, scope.p.y + (knockback.p.x * 200))
	    local offset = GUI.Scope.AbsoluteSize.x * 0.5
	    scope.t = Vector3.new(GUI.Crosshair.AbsolutePosition.X - offset - delta.x, GUI.Crosshair.AbsolutePosition.Y - offset - delta.y, 0)
	    oldPosition = Vector2.new(GUI.Crosshair.AbsolutePosition.X, GUI.Crosshair.AbsolutePosition.Y)
	end
	
	GUI.Scope.Visible = Scoping
	if not Scoping then
	    GUI.Crosshair.Main.Visible = true
	    scope.t = Vector3.new(600, 200, 0)
	else
		GUI.Crosshair.Main.Visible = false
	end
	
	if UserInputService.MouseEnabled and UserInputService.KeyboardEnabled then --For pc version
		if Fake:FindFirstChild("FakeCamera") then
			if (Camera.Focus.p-Camera.CoordinateFrame.p).magnitude <= 1 then
				if CFAngles then
					local v = WorldToScreen((Camera.CFrame * CFAngles:Inverse() * CFrame.new(0, 0, -4)).Position)
					local v2 = Camera.ViewportSize / 2
					GUI.Crosshair.Position = (v - v2).Magnitude > 0.08 and UDim2.new(0, v.X, 0, v.Y - 36) or UDim2.new(0, v2.X, 0, v2.Y - 36)
				else
					GUI.Crosshair.Position = UDim2.new(0, Mouse.X, 0, Mouse.Y)
				end	
			else
				GUI.Crosshair.Position = UDim2.new(0, Mouse.X, 0, Mouse.Y)
			end
		else
			GUI.Crosshair.Position = UDim2.new(0, Mouse.X, 0, Mouse.Y)
		end    
	elseif UserInputService.TouchEnabled and not UserInputService.MouseEnabled and not UserInputService.KeyboardEnabled and (Camera.Focus.p-Camera.CoordinateFrame.p).magnitude > 2 then --For mobile version, but in third-person view
	    GUI.Crosshair.Position = UDim2.new(0.5, 0, 0.4, -50)
	elseif UserInputService.TouchEnabled and not UserInputService.MouseEnabled and not UserInputService.KeyboardEnabled and (Camera.Focus.p-Camera.CoordinateFrame.p).magnitude <= 2 then --For mobile version, but in first-person view
		if Fake:FindFirstChild("FakeCamera") then
			if (Camera.Focus.p-Camera.CoordinateFrame.p).magnitude <= 1 then
				if CFAngles then
					local v = WorldToScreen((Camera.CFrame * CFAngles:Inverse() * CFrame.new(0, 0, -4)).Position)
					local v2 = Camera.ViewportSize / 2
					GUI.Crosshair.Position = (v - v2).Magnitude > 0.08 and UDim2.new(0, v.X, 0, v.Y - 36) or UDim2.new(0, v2.X, 0, v2.Y - 36)
				else
					GUI.Crosshair.Position = UDim2.new(0.5, 0, 0.5, -19)
				end	
			else
				GUI.Crosshair.Position = UDim2.new(0.5, 0, 0.5, -19)
			end
		else
			GUI.Crosshair.Position = UDim2.new(0.5, 0, 0.5, -19)
		end
    end
end

Please do not ask people to write entire scripts or design entire systems for you. If you can’t answer the three questions above, you should probably pick a different category.